2020-07-21 Finalize和Dispose

Finalize和Dispose都是用來釋放資源的。

Finalize也就是析構(gòu)函數(shù),是由gc來決定的屁药,等到gc執(zhí)行的時候才會去調(diào)用本刽,而Dispose一般是我們主動去調(diào)用的,在c#里面殿较,當(dāng)我們使用using括起來的代碼塊,會在結(jié)束之后主動調(diào)用Dispose。比如:

using(MyClass my=new MyClass())
{

}

這段代碼在執(zhí)行完畢之后就會主動調(diào)用MyClass 的Dispose方法笋额。

解釋一下為什么我們經(jīng)常會有一個protect類型的Dispose方法,參數(shù)是boo類型篷扩,形如
protect Dispose(bool disposing)
引用一段話:
只有一個Dispose()不可以. 為什么呢?因為如果只有一個Dispose()而沒有Dispose(bool disposing)方法.那么在處理實現(xiàn)非托管資源釋放的代碼中無法判斷該方法是客戶調(diào)用的還是垃圾回收器通過Finalize調(diào)用的.無法實現(xiàn) 判斷如果是客戶手動調(diào)用,那么就不希望垃圾回收器再調(diào)用Finalize()(調(diào)用GC.SupperFinalize方法).另一個可能的原因(:我們知道如果是垃圾回收器通過Finalize調(diào)用的,那么在釋放代碼中我們可能還會引用其他一些托管對象,而此時這些托管對象可能已經(jīng)被垃圾回收了, 這樣會導(dǎo)致無法預(yù)知的執(zhí)行結(jié)果(千萬不要在Finalize中引用其他的托管對象).

還有一個好處兄猩,對外只提供Dispose方法,這樣就不會錯誤的調(diào)用Dispose(false)了鉴未。

public class MyClass:IDisposable
{
    ~MyClass()
    {
      Dispose(false);
    }
    protected virtual void Dispose(bool disposing)
   {     
         // 那么這個方法是被客戶直接調(diào)用的,那么托管的,和非托管的資源都可以釋放
         if(disposing)
         {
            // 釋放 托管資源
           
         }        
        
         //釋放非托管資源
                        
         // 那么這個方法是被客戶直接調(diào)用的,告訴垃圾回收器從Finalization隊列中清除自己,從而阻止垃圾回                收器調(diào)用Finalize方法.        
         if(disposing) 
           GC.SuppressFinalize(this);            
   }
    //主動調(diào)用的dispose 
    public void Dispose()
   {
      Dispose(true);     
   }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枢冤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铜秆,更是在濱河造成了極大的恐慌淹真,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件连茧,死亡現(xiàn)場離奇詭異核蘸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)啸驯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門客扎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罚斗,你說我怎么就攤上這事徙鱼。” “怎么了针姿?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵袱吆,是天一觀的道長厌衙。 經(jīng)常有香客問我,道長杆故,這世上最難降的妖魔是什么迅箩? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮处铛,結(jié)果婚禮上饲趋,老公的妹妹穿的比我還像新娘。我一直安慰自己撤蟆,他們只是感情好奕塑,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著家肯,像睡著了一般龄砰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讨衣,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音反镇,去河邊找鬼固蚤。 笑死,一個胖子當(dāng)著我的面吹牛歹茶,可吹牛的內(nèi)容都是我干的夕玩。 我是一名探鬼主播燎孟,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼揩页,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烹俗?” 一聲冷哼從身側(cè)響起碍沐,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衷蜓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尘喝,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡磁浇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了朽褪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片置吓。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡无虚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衍锚,到底是詐尸還是另有隱情友题,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布戴质,位于F島的核電站度宦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏告匠。R本人自食惡果不足惜戈抄,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望后专。 院中可真熱鬧划鸽,春花似錦、人聲如沸戚哎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽型凳。三九已至丈冬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啰脚,已是汗流浹背殷蛇。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留橄浓,地道東北人粒梦。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像荸实,于是被迫代替她去往敵國和親匀们。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351