垃圾收集器调用Dispose()吗?

我以为如果你的程序没有,那么GC会调用Dispose,但是你应该在你的程序中调用Dispose()来使清理变得确定。

但是,从我的小testing程序,我没有看到Dispose被调用….

public class Test : IDisposable { static void Main(string[] args) { Test s = new Test(); s = null; GC.Collect(); Console.ReadLine(); } public Test() { Console.WriteLine("Constructor"); } public void Dispose() { Console.WriteLine("Dispose"); } } 

//输出只是“构造函数”,我不会像我所期望的那样得到“Dispose”。 这是怎么回事?

编辑:是的,我知道我应该调用Dispose() – 我使用一次性对象时遵循标准模式。 我的问题出现了,因为我试图追踪一些代码中的泄漏,这是一个被pipe理的C ++(另一个复杂的层次,可能是另一个线程的主题)。

GC不调用Dispose ,它调用你的终结器(你应该调用Dispose(false) )。

请看侧面的相关文章或查看Dispose模式的C#最佳实践( IDisposable上的文档对 IIRC进行了很好的解释)。

简短的回答是“不”。 更详细的答案可以在我对“依赖.NET垃圾收集器的糟糕做法”和“如果我不调用Dispose()”的回应中find