第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

垃圾收集器是否會(huì)為我調(diào)用IDisposable.Dispose?

垃圾收集器是否會(huì)為我調(diào)用IDisposable.Dispose?

手掌心 2019-08-06 16:10:13
垃圾收集器是否會(huì)為我調(diào)用IDisposable.Dispose?.NET IDisposable Pattern 意味著如果您編寫終結(jié)器并實(shí)現(xiàn)IDisposable,則終結(jié)器需要顯式調(diào)用Dispose。這是合乎邏輯的,而且在極少數(shù)情況下我總是會(huì)做終結(jié)器的保證。但是,如果我這樣做會(huì)發(fā)生什么:class Foo : IDisposable{      public void Dispose(){ CloseSomeHandle(); }}并且不要實(shí)現(xiàn)終結(jié)器或任何東西??蚣軙?huì)為我調(diào)用Dispose方法嗎?是的,我意識(shí)到這聽(tīng)起來(lái)很愚蠢,而且所有的邏輯都暗示它不會(huì),但我總是有兩件事讓我不確定。幾年前有人曾告訴我,事實(shí)上它會(huì)這樣做,而且那個(gè)人有“非常了解他們的東西”的良好記錄。編譯器/框架根據(jù)您實(shí)現(xiàn)的接口(例如:foreach,擴(kuò)展方法,基于屬性的序列化等)執(zhí)行其他“神奇”操作,因此這也可能是“魔術(shù)”。雖然我已經(jīng)閱讀了很多關(guān)于它的內(nèi)容,并且有很多暗示的內(nèi)容,但我從來(lái)沒(méi)有能夠找到這個(gè)問(wèn)題的肯定是或否答案。
查看完整描述

3 回答

?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

我想強(qiáng)調(diào)Brian在評(píng)論中的觀點(diǎn),因?yàn)樗苤匾?/p>

終結(jié)器不是像C ++那樣的確定性析構(gòu)函數(shù)。正如其他人所指出的那樣,沒(méi)有什么時(shí)候會(huì)被稱為保證,而事實(shí)上,如果你有足夠的內(nèi)存,如果將永遠(yuǎn)被調(diào)用。

但是關(guān)于終結(jié)器的壞處是,正如Brian所說(shuō),它會(huì)使你的對(duì)象在垃圾收集中存活下來(lái)。這可能很糟糕。為什么?

正如您可能知道或不知道的那樣,GC分為幾代 - Gen 0,1和2,以及大對(duì)象堆。Split是一個(gè)松散的術(shù)語(yǔ) - 你得到一塊內(nèi)存,但是有一些指向Gen 0對(duì)象的起點(diǎn)和終點(diǎn)。

思考過(guò)程是你可能會(huì)使用很多短暫的物體。因此,對(duì)于GC來(lái)說(shuō),這些應(yīng)該是簡(jiǎn)單快速的 - Gen 0對(duì)象。因此,當(dāng)存在內(nèi)存壓力時(shí),它首先做的是Gen 0集合。

現(xiàn)在,如果它沒(méi)有解決足夠的壓力,那么它會(huì)返回并進(jìn)行第1代掃描(重做第0代),然后如果仍然不夠,則執(zhí)行第2代掃描(重做第1代和第0代)。因此,清理長(zhǎng)壽命對(duì)象可能需要一段時(shí)間并且相當(dāng)昂貴(因?yàn)槟木€程可能在操作期間被掛起)。

這意味著,如果您執(zhí)行以下操作:

~MyClass() { }

無(wú)論如何,您的對(duì)象都將存在于第2代。這是因?yàn)镚C無(wú)法在垃圾回收期間調(diào)用終結(jié)器。所以必須最終確定的對(duì)象被移動(dòng)到一個(gè)特殊的隊(duì)列,由另一個(gè)線程清理掉(終結(jié)器線程 - 如果你殺了它就會(huì)發(fā)生各種壞事)。這意味著您的對(duì)象會(huì)更長(zhǎng)時(shí)間地掛起,并可能會(huì)強(qiáng)制更多垃圾收集。

所以,所有這一切只是為了讓你想要使用IDisposable來(lái)盡可能地清理資源,并認(rèn)真嘗試找到使用終結(jié)器的方法。這符合您的應(yīng)用程序的最佳利益。


查看完整回答
反對(duì) 回復(fù) 2019-08-06
  • 3 回答
  • 0 關(guān)注
  • 522 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)