微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 检测“泄漏”的IDisposable对象

有很多问题,询问如何检测Idisposable对象泄漏.似乎答案是 “you can’t”.

我刚刚检查了最简单的测试用例,Fxcop 10.0没有这样做,ReSharper 4与MSVS2010不这样做.

这似乎对我来说是错误的,比C中的内存泄漏更糟(至少我们已经建立了检测工具).

我在想:可以使用反射和其他模糊的高级技术,我可以在运行时注入检查,在终结器中看看dispose是否被调用

WinDBG SOS的魔术技巧怎么样?

即使没有现成的工具也可以,我想知道这是否可以在理论上实现(我的C#不是非常尖锐).

想法?

注意这个问题的标题可能是误导性的.这里的真正问题应该是是否已经将dispos()适当地放入Idisposable对象中. GC处理不算,因为我认为这是一个错误.

编辑:解决方案:.NET内存分析器做这个工作.我们只需要在程序结束时垃圾邮件发送几个GC.Collect(),以使我们的分析器能够正确地获取统计信息.

解决方法

你没有足够的搜索.有大量的.NET内存分析器,它会在程序运行时看到你的程序,并让你知道你的内存在哪里(如何泄漏).

我会检查以下任何一个

Microsoft’s CLR Memory Profiler (free)
RedGate ANTS Memory Profiler
JetBrain’s DotTrace (includes code profiler as well)
SciTech .NET Memory Profiler

更新

SciTech的.NET内存分析器具有一个名为“dispose Tracker”的功能,该功能适合OP的请求,仅在其应用程序中跟踪dispose调用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐