2011-03-07 32 views
2

因此,作为一名新的.NET程序员,我认为垃圾回收器会一直为我清理我的混乱。捕捉从未丢弃的IDisposables

现在,一年半之后,当我不知道必须在某些资源上调用dispose时,我在该代码中写出的内存异常中没有出现内存异常。我猜这是因为该代码分配了许多位图不会被处理...

我已经通过代码来清理这些,现在我知道更好。但我一直想念一些。有没有工具或设置可以看到IDisposables没有被丢弃?

虽然我可以看到简单的情况很容易被编译器或工具捕获,但我也可以看到一些更难以捕捉的复杂场景。所以如果没有我能理解的工具,并且会继续用手工做。

+1

不要惊慌。只有位图才算真正的数字,在代码库中搜索“图像”和“位图”。控件也是如此,但你可以看到使用任务管理器(永久)容易泄漏。这对另外几年来说是好事,你可以在你方便的时候在其他人身上花掉。 – 2011-03-07 18:19:17

+0

@Hans - 很高兴知道。谢谢。 – Vaccano 2011-03-07 18:31:57

回答

5

看看FxCop。 One of its rules将捕获执行IDisposable的项目,其中Dispose()未被调用。

1

内存分析器将能够显示给定类的所有活动对象(从哪里分配),这可以是一个很好的起点。

一些内存分析器现在声称跟踪对Dispose()的缺少调用, - 我不知道它们的工作效果如何。

+0

应该在.NET SDK中的一个这样的分析器是CLR分析器。我相信它会报告结束函数调用中未释放句柄的数量。 – 2011-03-07 17:54:05