【发布时间】:2010-10-10 02:41:48
【问题描述】:
我必须查看其他人编写的代码,该代码存在一些内存泄漏。现在我正在搜索一次性对象以使用 using 语句将它们包含在内,我想知道是否有一种快速方法可以告诉您声明的所有一次性对象。我的意思是像 resharper 或其他 Visual Studio 插件。
谢谢。
【问题讨论】:
标签: c# memory-leaks dispose idisposable using-statement
我必须查看其他人编写的代码,该代码存在一些内存泄漏。现在我正在搜索一次性对象以使用 using 语句将它们包含在内,我想知道是否有一种快速方法可以告诉您声明的所有一次性对象。我的意思是像 resharper 或其他 Visual Studio 插件。
谢谢。
【问题讨论】:
标签: c# memory-leaks dispose idisposable using-statement
我知道你的意思。我不知道,但看看 FxCop。它可能在某处有一条规则来检查实现 IDisposable 的对象是否未释放。请注意,只是一种预感。
更新:Mitch Wheat 写道:
FxCop 包含规则,即所有从实现 IDisposable 的类型派生的类型都应实现 Dispose() 模式
谢谢,米奇。
【讨论】:
另外,根据您是否使用这样的系统,如果您使用的是 IoC 容器,它可能会在通过接口将服务返回给您之前经过几层代码,并且处理起来可能并非易事IDisposable 在这种情况下。
也许您解析的接口不是从 IDisposable 继承的,但实际使用的服务类会继承吗?如何处理?等等
【讨论】:
您可以使用ReSharper 执行此操作。借助 ReSharper,您可以使用 Alt-End 轻松导航任何接口的实现,但对于像 IDisposable 这样的流行接口,这并不实用。
你可以这样做:
System.IDisposable
IDisposable 的所有 类型(您的解决方案)的列表。 粗体中的那些是你想要的——它们直接实现IDisposable。希望对您有所帮助。
【讨论】:
FxCop 中的使用规则 CA2213 (DisposableFieldsShouldBeDisposed) 和 CA2215 (DisposeMethodsShouldCallBaseClassDispose) 将捕获您自己的类中未正确调用 dispose 的位置,但我不相信有任何东西可以检查 dispose 总是被调用,尽管具有讽刺意味的是DoNotDisposeObjectsMultipleTimes 的规则 (CA2202)
【讨论】: