我已经实现Dispose
了......支持它的所有地方。我正在删除所有事件处理程序。我不是在调用本机代码。
我什至遍历每个字典并将值设置为 null 并在所有项目上调用 .Clear()。
问题:
如何确定我的代码在哪里泄漏?
我首先通过在测试中运行它一夜之间发现了泄漏。它使用固定数量的内存,因此它应该增长然后变得有些静态。然后我让前台线程显示内存是这样的:
if (key.KeyChar == 'g')
{
long pre = GC.GetTotalMemory(false);
long post = GC.GetTotalMemory(true);
Console.WriteLine("{2} Pre:{0} \tPost:{1}", pre, post, System.DateTime.Now);
GC.Collect();
}
我跑了几次(几个小时,偶尔按一次“g”),看到一个不断增加的数字。