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

3

我正在接手一个已有的应用程序,它有许多内存泄漏问题。我怀疑这些问题是由于订阅了但从未释放的事件处理程序引起的。有哪些工具或资源可以帮助我确定即使因为开放式事件处理程序而超出范围的对象?


不是直接回答你的问题,但我建议你阅读这篇文章:http://www.interact-sw.co.uk/iangblog/2004/07/07/circulareventrefs - Ta01
WinDbg + psscor2 / SOS 提供了一些很棒的命令,例如 !GCWhere、!FindRoots、!HandleCLRN、!GCRoot 等。 - vcsjones
2个回答

2
我成功地使用了 Redgate 的 ANTS 内存分析工具来追踪类似的问题。虽然这不是一个便宜的产品,但在我的经验中,它非常有用,也值得花费。

0

JetBrains 还有一个内存分析工具: dotTrace Memory。我有这个工具,但还没有用得足够多来给出推荐。它也不是免费的(除非你在用户组中赢得了许可证)。 :)

我还建议确保所有实现 IDisposable 接口的类的对象被正确释放。使用 using 块可以确保即使发生异常也能进行释放。虽然这涉及非托管资源而不是内存,但在实践中可能没有太大区别。

另请参考 检测 "泄漏" 的 IDisposable 对象,其中提到了多个内存分析工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接