14

我必须查看其他人编写的代码,该代码有一些内存泄漏。现在我正在搜索一次性对象以使用 using 语句将它们包含在内,我想知道是否有一种快速方法可以告诉您声明的所有一次性对象。我的意思是像 resharper 或其他 Visual Studio 插件。

谢谢。

4

4 回答 4

11

我明白你的意思。我不知道,但看看 FxCop。它可能在某处有一条规则来检查实现 IDisposable 的对象是否未释放。只是一种预感,请注意。

更新米奇小麦写道:

FxCop 包含规则,也就是说,从实现 IDisposable 的类型派生的所有类型都应该实现 Dispose() 模式

谢谢,米奇。

于 2009-02-26T15:29:31.270 回答
10

你可以用ReSharper做到这一点。使用 ReSharper,您可以使用 Alt-End 轻松导航任何接口的实现,但对于像IDisposable这样的流行接口是不切实际的。

这是你可以做的:

  1. 转到对象浏览器(Ctrl-Alt-J 或查看->对象浏览器)
  2. 寻找System.IDisposable
  3. 右键单击并选择“Find Usages Advanced”(ReSharper 的菜单项)
  4. 用户查找,检查“实施”,在范围下选择解决方案
  5. 您将获得实施的所有类型(您的解决方案)的列表IDisposable。粗体是你想要的——它们IDisposable直接实现。

希望有帮助。

于 2009-02-26T15:51:39.330 回答
5

使用规则 FxCop 中的 CA2213 (DisposableFieldsShouldBeDisposed) 和 CA2215 (DisposeMethodsShouldCallBaseClassDispose) 将捕获您自己的类中未正确调用 dispose 的位置,但我不相信有任何东西可以检查 dispose 总是被调用,尽管具有讽刺意味的是有一个规则( CA2202) 用于 DoNotDisposeObjectsMultipleTimes

于 2009-02-26T15:54:35.767 回答
0

此外,根据您是否使用这样的系统,如果您使用的是 IoC 容器,它可能会在服务通过接口返回给您之前经过几层代码,并且在这种情况下处理 IDisposable 可能并非易事一个案例。

也许您解析的接口不是从 IDisposable 继承的,但实际使用的服务类会继承吗?如何处理?等等

于 2009-02-26T15:44:57.753 回答