36

using如果我忘记将代码包装在一个块中,或者在一个块中省略正确的 Dispose 调用,Resharper 4(甚至是 Visual Studio 本身......)中是否有一个设置会强制发出警告finally

4

5 回答 5

29

正确的自动 Dispose 分析需要以全局方式进行 DFA(数据流分析)。您不太可能创建 IDisposable 对象并且不对它调用任何方法并且不将其作为参数传递。如果一次性对象被传递给其他方法(包括调用其成员,当“this”被隐式传递时),该工具应分析是否未在其中调用 Dispose,或者该对象未存储在某处以供以后处理。

也就是说,检查一次性对象是否实际上以“使用”构造或以任何其他方式处置的天真实现会产生过多的误报,并使分析无用。

于 2008-09-19T13:27:00.500 回答
6

对当前方法不满,我创建了自己的方法:EyeDisposable。它是一个 IL 仪器,因此它应该捕获许多静态分析未捕获的泄漏。还处于早期阶段,欢迎提出意见。

于 2011-05-22T12:40:50.563 回答
3

有关测试in的一些技巧,请参阅此博客文章。基本上,编写一个仅调试的析构函数,断言您已被处置。Dispose()DEBUG

于 2008-09-19T15:03:10.393 回答
2

您可以为 R# 设计一个小型插件,您可以在代码编辑器中运行它来扫描代码并更新代码分析,以反映您是一个缺少刚才描述的结构的对象。

如果你决定走那条路,我会研究 R# 插件架构。

于 2008-09-19T14:44:24.667 回答
2

您可能想为此查看 FXCop:http: //msdn.microsoft.com/en-us/library/ms182328 (VS.80).aspx

遗憾的是 R# 没有处理它,即使只是对类中的字段和/或您创建的变量的警告。

于 2009-09-22T10:37:52.353 回答