IDisposable – 自动检查使用构造

有没有人知道自动查找任何变量的方法,其中类型实现IDisposable但不使用using构造?

即。 检查可能未发布的非托管资源的方法?

此外,是否可以查看正在运行的应用程序所拥有的资源的数量和类型?

这有一个代码分析规则:

http://msdn.microsoft.com/en-us/library/ms182289%28VS.100%29.aspx

这可以从VS 2010 Premium或Ultimate运行,也可以与FxCop分开运行:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=917023f6-d5b7-41bb-bbc0-411a7d66cf3c

我看到的另一件事是在构造IDisposable对象时捕获堆栈跟踪,然后如果命中了finalize(意味着没有调用Dispose()则使用构造的堆栈跟踪记录错误。 这很昂贵所以你可能只想在开发中这样做,或者只是在你的应用第二次遇到这个问题时才开始收集堆栈跟踪(如果你碰到它一次,你最有可能会多次遇到它一个应用程序执行)。 此方法适用于较长寿命的IDisposable实例(不仅仅是局部变量)。 当然它也只适用于自定义IDisposable对象,因为它需要构造函数/ dispose / finalizer中的自定义代码。

VS 2010代码分析器和FxCop? (不确定)可靠性规则在检测分析代码中是否存在执行路径时会做得非常好,其中实现IDisposable对象超出范围而不调用Dispsoe() (它过于苛刻且会在许多情况下检测到误报) 。

这当然不会强制执行using构造,因为正确实现的try-finally块将通过测试(两者显然是相同的,所以我不确定这是否是一个问题)。

编辑 :FX Cop不支持此警告。 它自VS 2005代码分析器以来可用。