检测附加事件处理程序以进行垃圾回收

时间:2011-08-25 17:07:27

标签: .net event-handling garbage-collection

我正在继承一个有许多内存空洞的现有应用程序。我怀疑它们是由订阅但从未发布的事件处理程序引起的。我可以使用哪些工具或资源来帮助识别即使在由于打开事件处理程序而超出范围之后仍保留的对象?

2 个答案:

答案 0 :(得分:2)

我已成功使用redgate's ANTS memory profiler来追查类似的问题。它不是一种廉价的产品,但根据我的经验,它已被证明非常有用并且值得付出代价。

答案 1 :(得分:0)

JetBrains还有一个内存分析器:dotTrace Memory。我已经得到了它,但还没有用它来提出建议。它也不是免费的(除非您在用户组中获得许可)。 :)

我还要检查以确保其类实现IDisposable的所有对象都已正确处理。即使发生异常,using块也会保证这一点。虽然这涉及非托管资源而非记忆,但在实践中可能没什么区别。

另请参阅Detecting "leaked" IDisposable objects,其中提到了多个内存分析器。