簡體   English   中英

在C#中使用Dispose()的終結器

[英]Finalizers with Dispose() in C#

請參閱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,終結器將(最終)運行以進行最終清理。 由於最終確定會損害性能,理想情況下沒有人會忘記Dispose。 使用構造對此有所幫助。

有兩種情況:

  • 您的代碼調用Dispose(首選)並取消Finalizer,從而消除了開銷。
  • 您的代碼“泄漏”了對象,GC調用了Finalizer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM