你如何管理C#中的确定性终结?

8 c# garbage-collection

我有一个C#对象,其中一个关键资源需要在非常具体的时间点刷新,这使得它成为一个糟糕的候选者,让垃圾收集器无论什么时候处理它,我应该如何处理它?是否有类似C++的删除操作符,让我在需要时手动终止该对象的实例?

Jef*_*tes 21

你在找IDisposable.这是一个实现它的示例类.

class MyDisposableObject : IDisposable
{
   public MyDisposableObject()
   {
   }

   ~MyDisposableObject()
   {
      Dispose(false);
   }

   private bool disposed;
   private void Dispose(bool disposing)
   {
      if (!this.disposed)
      {
          if (disposing)
          {
             // Dispose of your managed resources here.
          }

          // Dispose of your unmanaged resources here.

          this.disposed = true;
       }
   }

   void IDisposable.Dispose()
   {
      Dispose(true);
      GC.SuppressFinalize(this);
   }
}
Run Code Online (Sandbox Code Playgroud)

要使用它,您可以执行以下操作:

public void DoingMyThing()
{
   using (MyDisposableObject obj = new MyDisposableObject())
   {
      // Use obj here.
   }
}
Run Code Online (Sandbox Code Playgroud)

using关键字确保在其作用域的末尾调用Dispose()on方法IDisposable.


Dav*_*vid 2

这正是该IDiposable界面的用途。您在方法中释放关键资源Dispose(),然后将对象保留下来,让垃圾处理器来处理内存的释放。