在C#中使用Dispose()的终结器

请参阅MSDN的代码示例:( http://msdn.microsoft.com/en-us/library/b1yfkh5e ( v=VS.100 ) .aspx )

// Design pattern for a base class. public class Base: IDisposable { private bool disposed = false; //Implement IDisposable. public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { // Free other state (managed objects). } // Free your own state (unmanaged objects). // Set large fields to null. disposed = true; } } // Use C# destructor syntax for finalization code. ~Base() { // Simply call Dispose(false). Dispose (false); } } 

在Dispose()实现中,它调用GC.SupressFinalize();,但提供了一个析构函数来完成对象。

调用GC.SuppressFinalize()时为析构函数提供实现有什么意义?

只是有点混淆意图是什么?

有两种情况:

  • 您的代码调用Dispose(首选)并取消Finalizer,从而消除了开销。
  • 您的代码“泄漏”了对象,GC调用了Finalizer。

如果有人忘记调用Dispose,终结器将(最终)运行以进行最终清理。 由于最终确定会损害性能,理想情况下,没有人会忘记Dispose。 使用构造对此有所帮助。