我想知道是否有一个插件可以检测并创建警告(或错误),如果它检测到创建了一个永远不会丢弃的IDisposable对象。
我查看了Resharper的文档,但没有看到任何看起来像我想要的东西。
编辑 - 更具体地说,我应该说一个实现IDisposable的局部变量,但从不处理。
例如,Pen是在绘制方法中创建的,但在绘制完成后不会处理。
答案 0 :(得分:2)
在FxCop中已经开启和关闭了几次。它的当前状态再次开启,至少对于VS2010附带的版本而言。它会在此代码上生成CA2000:
protected override void OnPaint(PaintEventArgs e) {
var pen = new Pen(Brushes.Black);
}
警告5 CA2000: Microsoft.Reliability:方法 'Form1.OnPaint(PaintEventArgs)',调用 System.IDisposable.Dispose on object 所有引用之前的“笔” 超出范围。
请注意此警告的可靠性不高,这是一个难以解决的问题。
答案 1 :(得分:1)
静态分析工具非常不可能显示某个对象是否曾经被置于任意程序中。我相信这实际上等同于解决停机问题。