Fehlerbehebung bei .NET-Speicherlecks - Woher wissen, was einen Verweis auf was enthält?

Ich arbeite an einer .NET-Anwendung, bei der anscheinend ein Speicherverlust vorliegt. Ich kenne die Lehrbuchantworten, dass Ereignisse abgemeldet werden sollten, Einwegobjekte entsorgt werden sollten usw.

Ich habe ein Testkabel, das den Fehler reproduzieren kann. Im Finalizer einer bestimmten Klasse schreibe ich an die Konsole

public class Foo
{
   // Ctor
   public Foo()
   {
   }

   ~public Foo()
   {
       Console.WriteLine("Foo Finalized");
   }
}

In der Testumgebung erstelle ich eine einzelne Instanz von Foo (die wiederum Hunderte anderer Typen erstellt und mit diesen interagiert), entferne sie dann und rufe den Garbage Collector auf.

Ich finde, der Foo Finalizer wird nie aufgerufen. Ich habe eine ähnliche Klasse mit diesem Setup, die als Kontrolltest abgeschlossen wird.

Meine Frage lautet also:

Wie kann ich mit kommerziellen oder Open-Source-Tools genau feststellen, was einen Hinweis auf Foo enthält?

Ich besitze eine professionelle Lizenz für dotTrace Memory Profiler, kann aber anhand der Hilfedateien nicht herausfinden, wie ich es verwende.

Aktualisieren: Ich benutze jetztdotMemory 4.0Dies ist der Nachfolger des (guten, aber unbrauchbaren) dotTrace Memory 3.5.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage