有很多问题在SO上问如何检测IDisposable对象泄漏。答案似乎是"你不能"。
我刚刚用最简单的测试用例进行了检查,FxCop 10.0没有做到这一点,ReSharper 4与MSVS2010也没有做到这一点。
对我来说,这似乎是错误的,比C中的内存泄漏更糟糕(至少我们已经建立了检测工具)。
我在想:是否可能使用反射和其他模糊的高级技术,在终结器中注入一个检查,以查看是否已调用Dispose
?
WinDBG+SOS的魔术技巧怎么样?
即使没有现有的工具可以做到这一点,我也想知道这在理论上是否可能(我的C#不是很好)。
有什么想法吗?
注意:这个问题的标题可能会误导。真正的问题应该是一个IDisposable
对象是否已经正确地Disposed()
。被GC处理掉不算,因为我认为那是一个错误。
编辑:解决方案:.NET Memory Profiler可以完成这项工作。我们只需要在程序末尾垃圾回收几次GC.Collect()
,以使我们的分析工具能够正确地获取统计数据。
IDisposable
。如果是的话,我会在它们需要存活的范围内用using
包装它们。这对现有代码没有任何作用,但我只是想提一下。 - Nick Strupat