Dot-Net

IDisposable 介面如何工作?

  • March 10, 2009

我知道它用於釋放非託管資源,但是,我對何時Dispose實際呼叫感到困惑。我知道它在塊的末尾被using呼叫,但是當對像被垃圾收集時它也會被呼叫嗎?

如果你正確地實現了 IDisposable,你還應該包含一個終結器,它將在你的對像上呼叫 Dispose()。

如果你這樣做,它將被 GC 呼叫。但是,嘗試始終自己處理這些物品仍然是一個非常好的主意。

依賴終結器呼叫 Dispose 的最大問題是它會發生在您無法控制的另一個執行緒中。在某些情況下,這可能會產生令人討厭的後果,包括導致 GC 執行緒中發生的異常,這是不好的,以及檢查一個已處置的欄位。這也是為什麼在 Dispose() 方法中包含 GC.SuppressFinalize(this) 很重要的部分原因 - 一旦對像被釋放,您就不想重新釋放它。

引用自:https://stackoverflow.com/questions/632004