【发布时间】:2015-05-07 00:16:49
【问题描述】:
我正在寻找大量代码库中的内存泄漏,因此逐行观察 IDisposable 使用的每个可能位置,而不是放入 using 语句或不被处置不是一种选择。
我目前正在使用 NDepend 与来自此答案 NDepend CQL Query for missing IDisposable implementation 的查询 但这不是我需要的。我需要知道一个对象是否被实例化并且稍后没有被处理。如何在 NDepend 中编写一个可以找到这些对象的查询?或者,如果这不可能,那么如何获取 IDisposable 对象被实例化的位置列表?
【问题讨论】:
-
“要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。”
-
我建议改用一些内存分析器(Dynatrace、ANTS 内存分析器等)。它比静态代码分析更有效地调试这类问题,不幸的是更好的分析器不是免费的。
-
好的,我已经把问题改得更具体了
-
@OndrejSvejdar 我使用了 RedGate 和 JetBrains 分析器,发现了一些问题。我现在需要的是确保代码通过一些质量要求。
-
顺便说一句:未处理的
IDisposable不是内存泄漏。它只是延迟了资源的最终确定。这本身就已经够糟糕的了,但真正的内存泄漏是创建对象并错误地保持引用(可丢弃或不可丢弃)。与跟踪IDisposables 相比,使用静态检查器检测此类事情可能更不可行。
标签: c# static-analysis idisposable ndepend