kiz*_*zx2 11 .net c# memory-leaks idisposable
有很多问题要求如何检测IDisposable对象泄漏.似乎答案是"你不能".
我刚刚用最琐碎的测试用例检查过,FxCop 10.0没有这样做,带有MSVS2010的ReSharper 4没有这样做.
这对我来说似乎不对,比C中的内存泄漏更糟糕(至少我们已经建立了检测工具).
我在想:是否有可能使用反射和其他模糊的高级技术,我可以在运行时注入一个检查,在终结器中查看是否Dispose已被调用?
WinDBG + SOS的魔术技巧怎么样?
即使没有现成的工具,我也想知道这在理论上是否可行(我的C#不是很尖锐).
想法?
注意这个问题的标题可能会产生误导.这里真正的问题应该是一个是否IDisposable对象已Disposed()正确.由于我认为这是一个错误,因此由GC处理并不重要.
编辑:解决方案:.NET Memory Profiler完成工作.我们只需要GC.Collect()在程序结束时发送几个垃圾邮件,以使我们的探查器能够正确地获取统计数据.
Jus*_*ner 12
你搜索不够努力.有很多.NET内存配置文件可以在程序运行时查看你的程序,并让你知道你的内存使用的位置和方式(以及泄漏的内容).
我会检查以下任何一项:
微软的CLR内存分析器(免费)
RedGate ANTS内存分析器
JetBrain的DotTrace(包括代码分析器)
SciTech .NET内存分析器
更新
SciTech的.NET内存分析器具有一个名为"Dispose Tracker"的功能,该功能符合OP的要求,即仅在其应用程序中跟踪Dispose调用.