我正在开发一个似乎存在内存泄漏的 .NET 应用程序。我知道教科书上的答案,应该取消订阅事件,应该处置一次性物品等......
我有一个可以重现错误的测试工具。在某个类的终结器中,我写信给控制台
public class Foo
{
// Ctor
public Foo()
{
}
~public Foo()
{
Console.WriteLine("Foo Finalized");
}
}
在测试工具中,我创建了 Foo 的单个实例(它反过来创建并与数百种其他类型交互)然后删除它并调用垃圾收集器。
我发现永远不会调用 Foo 终结器。我有一个与此设置类似的课程,最终确定为控制测试。
所以我的问题是:
我如何使用商业或开源工具来确定究竟什么是对 Foo 的引用?
我有 dotTrace Memory profiler 的专业许可证,但无法从帮助文件中弄清楚如何使用它。
更新:我现在正在使用dotMemory 4.0,它是(好的,但不可用的)dotTrace Memory 3.5 的继承者。