C 實現IDispose介面

2022-01-21 14:02:15 字數 942 閱讀 6914

.net的gc機制有兩個問題:首先gc並不能釋放所有資源,它更不能釋放非託管資源。其次,gc也不是實時的,所有gc存在不確定性。

為了解決這個問題donet提供了析構函式

public

class

testclass : system.idisposable

//protected的dispose方法,保證不會被外部呼叫。

//傳入bool值disposing以確定是否釋放託管資源

protected

void dispose(bool

disposing)

///todo:在這裡加入清理"非託管資源"的**

}

//供gc呼叫的析構函式

~testclass()

}

而即使我們忘記了在合適的時候呼叫dispose,gc也會在釋放物件的時候幫我們清理非託管資源的。gc所充當的角色只是一種保障手段,它應該充當這種角色,我們不能過分依賴它。實際上,在較大的模組退出時我們還應該及時地手動呼叫gc.collect進行垃圾**。

為什麼實現idisposable介面的類的物件,因為.net clr是採用gc(垃圾**器)機制管理記憶體,不想c++語言那樣,能保證物件的析構函式在作用域結束時被總是被自動呼叫,有時如果程式執行的過程中一直沒有滿足啟動gc的條件,則可能gc一次也沒啟動。 這樣,如果乙個類需要占用重要資源,就應該實現idisposable介面,或者使用另一種簡捷的方式:使用using,

如:using(myclass myobj = new myclass())

對於沒有實現idisposable介面的,也就沒什麼dispose方法,但他們的finalize同樣不能保證被呼叫。

using(myclass myobj = new myclass())

是一種好方法,但是只有myclass實現了idisposable介面才能這樣寫.

C 實現IDispose介面

net的gc機制有兩個問題 首先gc並不能釋放所有資源,它更不能釋放非託管資源。其次,gc也不是實時的,所有gc存在不確定性。為了解決這個問題donet提供了析構函式 public class testclass system.idisposable protected的dispose方法,保證不會...

C 中IDispose介面的實現及為何這麼實現詳解

前言 我原本認為對於idispose的實現方法,只要在裡面釋放非託管資源就行了,但是通過網上資料,看到很多實現方法並不是僅僅做釋放非託管資源,非常迷惑,關鍵是這些資料也沒詳細的告訴你為什麼這麼做?之後通過stackoverflow了解到這一步一步的原因,說的十分詳細,結合自己的認識,翻譯後分享給大家...

如何實現真正的IDispose?

最近在專案開發的過程中,我們的乙個資料同步程式碰到了資源無法釋放的問題。我使用的定位方法是效能計數器 perfmon.msc 顯然這只是乙個很粗礦的判斷。後通過code review我們的 中定義了乙個同步的中間類,該類中會快取大量的中間資料集。而程式中麼有及時的 這些臨時物件,最終我建議該類實現一...