Hi,

I'm new to memory leak detection in C# and Ants Memory Profiler. I found a few objects that I believe should have been released after GC.Collect() is called but they still show up in Ants profiler as being alive.

Do I have a memory leak and how do I figure out which one(s) causes the leak for this situation:

If A holds references to X1,X2,...Xn;
X1 holds references to X1a, X1b, X1c...X1z
X2 holds references to X2a, X2b, X2c...X2z

A is reported still alive and nobody holds references to it.

In my case A is Hashtable+HashtableEnumerator

Thank you very much.
Zin
0

Comments

8 comments

  • Brian Donahue
    Hello Zin,

    This is a difficult question to answer without knowing the application and what it's been doing. If you want, you can send the profiler results to us at support@red-gate.com and we can try to have a look and offer some suggestions for you.
    Brian Donahue
    0
  • Zin
    It took me a while to collect the data and the result file is ~80Mb, it won't work via emailing
    Zin
    0
  • Brian Donahue
    Hello Zin,

    Give me until tomorrow and I will set up a private FTP account for you on our FTP server.
    Brian Donahue
    0
  • Brian Donahue
    Hello Zin,

    If you're still interested, I've set up an FTP directory for you. Your username and password have been sent via email.
    Brian Donahue
    0
  • caroline
    I have the samilar question, is there a guide line to pinpoint the memory leak cause using the memory profiler result? thanks
    caroline
    0
  • Brian Donahue
    I'm under the impression that this depends a lot on the nature of the application. You need to know what objects should be 'live' and which ones should be disposed. Without that information, you're left squarely in the dark.

    The starting point is normally to look at the 'all objects' tab and find the number of objects that have been allocated and compare that to the live count.
    Brian Donahue
    0
  • caroline
    I'm under the impression that this depends a lot on the nature of the application. You need to know what objects should be 'live' and which ones should be disposed. Without that information, you're left squarely in the dark.

    The starting point is normally to look at the 'all objects' tab and find the number of objects that have been allocated and compare that to the live count.

    'live' means the object is referenced and cannot be collected, right? how if an object is already out of calling range, such as a private string?
    caroline
    0
  • Brian Donahue
    Hello Caroline,

    As far as I'm aware, a live object is an object which still has a pointer to it on the program's stack. I'm sure it's more complex than that, though.
    Brian Donahue
    0

Add comment

Please sign in to leave a comment.