如何找到实现IDisposable的所有类?

apo*_*020 17 c# idisposable visual-studio-2008

我正在开发一个大型项目,我的任务之一是消除可能的内存泄漏.在我的代码中,我注意到几个IDisposable项目没有被处理,并已修复.但是,这引出了一个更基本的问题,如何找到我的项目中使用 IDisposable的所有类?(不是自定义创建的类,而是已使用的标准库类).
我已经找到了一个实现IDisposable的不太明显的类(DataTable实现了MarshalByValueComponent,它继承了IDisposable).现在,我通过使用MSDN手动检查任何可疑的类,但是我没有某种方法可以自动执行此过程?

Tho*_*que 18

Reflector可以显示实现哪些类IDisposable:只需IDisposable在Reflector中找到该接口,然后展开"派生类型"节点

代码中的另一个选项是扫描所有已加载的程序集以实现以下类型IDisposable:

var disposableTypes =
    from a in AppDomain.CurrentDomain.GetAssemblies()
    from t in a.GetTypes()
    where typeof(IDisposable).IsAssignableFrom(t)
    select t;
Run Code Online (Sandbox Code Playgroud)


Ale*_*x F 7

使用FxCop测试您的项目.它可以捕获未放置IDisposable对象的所有位置.您可能需要做一些工作来禁用所有不相关的FxCop规则,只留下与IDisposable相关的规则.

例如,这是FxCop IDisposable规则之一:http://msdn.microsoft.com/en-us/library/ms182289%28VS.100%29.aspx

注意:您需要找到自己的.NET和第三方IDisposable对象,这些对象未正确处理.