这个问题已经在这里有了答案 :
垃圾收集器会打给IDisposable.Dispose给我吗? (9个答案)
5年前关闭。
我以为,如果您的程序没有,GC最终将调用Dispose,但您应该在程序中调用Dispose()只是为了使清理具有确定性。
但是,从我的小测试程序中,我根本看不到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()-使用一次性对象时,我确实遵循标准模式。之所以出现我的问题,是因为我试图追踪别人代码中的泄漏,该代码是托管C ++(另一层复杂性,这可能是另一个线程的主题)。
GC不会调用Dispose,它会调用终结器(您应该调用Dispose(false))。
Dispose
Dispose(false)
请查看侧面的相关文章或查找Dispose模式的C#最佳做法(有关文档的IDisposable IIRC解释得很好)。
IDisposable