【发布时间】:2012-05-22 21:48:59
【问题描述】:
我已经在所有支持它的地方实现了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”一次),看到一个不断增加的数字。
【问题讨论】:
-
您是否随时与 COM 对象进行交互?
-
是什么让你觉得它在泄露?
-
将您的应用程序浸入水中,看看气泡从哪里冒出来。
-
@vcsjones 根据您的要求更新
-
@MichaelTodd 我只是在调用 .NET 对象……尽管它们可能在后台调用 COM。这有关系吗?
标签: c# visual-studio-2010 memory-leaks dispose