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

msu*_*ash 4 c# dispose finalizer

请参阅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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Kat*_*ory 6

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


Hen*_*man 6

有两种情况:

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