如果我忘记将代码包装在using
块中,或者在{{1}中省略正确的Dispose调用,Resharper 4(甚至Visual Studio本身......)中是否有设置会强制发出警告阻止?
答案 0 :(得分:28)
正确的自动Dispose分析需要以全局方式进行DFA(数据流分析)。您不可能创建一个IDisposable对象,也不会在其上调用任何方法,也不会将其作为参数传递。如果将一次性对象传递给其他方法(包括调用其成员,当隐式传递“this”时),该工具应分析是否未调用Dispose,或者该对象未存储在某处以供以后处理。
也就是说,检查一次性物体是否实际上处置“使用”构造或以任何其他方式进行的天真实施会产生太多的误报,并使分析变得毫无用处。
答案 1 :(得分:6)
对当前方法的不满,我创建了自己的方法:EyeDisposable。它是一个IL指导者,因此它应该捕获许多未被静态分析捕获的泄漏。它还处于早期阶段,欢迎使用。
答案 2 :(得分:2)
您可以设计一个R#的小插件,您可以在代码编辑器中运行,该代码编辑器扫描代码并更新代码分析,以反映您丢失了刚刚描述的结构的对象。
如果您决定走这条路,我会研究R#插件架构。
答案 3 :(得分:2)
有关在Dispose()
中测试DEBUG
的一些技巧,请参阅this blog post。基本上,编写一个仅限DEBUG的析构函数来断言你已被处置。
答案 4 :(得分:2)
您可能需要查看FXCop:http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx
遗憾的是R#没有处理它,即使只是警告你的类中的字段和/或你创建的变量。