Отладка утечек памяти .NET - как узнать, что содержит ссылку на что?
Я работаю над приложением .NET, где, как представляется, утечка памяти. Я знаю ответы из учебника, что события должны быть отписаны, одноразовые предметы должны быть утилизированы и т. Д ...
У меня есть тестовая система, которая может воспроизвести ошибку. В финализаторе определенного класса я пишу на консоль
public class Foo
{
// Ctor
public Foo()
{
}
~public Foo()
{
Console.WriteLine("Foo Finalized");
}
}
В тестовом жгуте я создаю один экземпляр Foo (который в свою очередь создает сотни сотен других типов и взаимодействует с ним), затем удаляет его и вызывает сборщик мусора.
Я нахожу, что Foo Finalizer никогда не вызывается. У меня есть подобный класс с этой настройкой, который завершен в качестве контрольного теста.
Итак, мой вопрос заключается в следующем:
How can I determine using commercial or open source tools exactly what is holding a reference to Foo?
У меня есть профессиональная лицензия на профилировщик dotTrace Memory, но я не могу понять из файлов справки, как ее использовать.
Update: Я сейчас пользуюсьdotMemory 4.0, который является преемником (хорошей, но непригодной) памяти dotTrace 3.5.