新聞中心
1. .NET資源分托管資源和非托管資源,對(duì)于托管資源,.NET GC可以很好的回收無(wú)用的垃圾,而對(duì)于非托管(例如文件訪問,網(wǎng)絡(luò)訪問等)需要手動(dòng)清理垃圾(顯式釋放)。

10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有阿克蘇免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
2. 非托管資源的釋放,.NET提供了兩種方式:
1).Finalizer:寫法貌似C++的析構(gòu)函數(shù),本質(zhì)上卻相差甚遠(yuǎn)。Finalizer是對(duì)象被GC回收之前調(diào)用的終結(jié)器,初衷是在這里釋放非托管資源,但由于GC運(yùn)行時(shí)機(jī)的不確定性,通常會(huì)導(dǎo)致非托管資源釋放不及時(shí)。另外,F(xiàn)inalizer可能還會(huì)有意想不到的副作用,比如:被回收的對(duì)象已經(jīng)沒有被其他可用對(duì)象所引用,但Finalizer內(nèi)部卻把它重新變成可用,這就破壞了GC垃圾收集過(guò)程的原子性,增大了GC開銷。
2).Dispose模式:C#提供using關(guān)鍵字支持Dispose Pattern進(jìn)行資源釋放。這樣能通過(guò)確定的方式釋放非托管資源,而且using結(jié)構(gòu)提供了異常安全性。所以,一般建議采用Dispose Pattern,并在Finalizer中輔以檢查,如果忘記顯式Dispose對(duì)象則在Finalizer中釋放資源。
3. 托管資源的回收,判斷對(duì)象是否要被回收只要判定此對(duì)象或者其包含的子對(duì)象沒有任何引用是有效的
4. GC的代價(jià):一則喪失了托管資源回收的實(shí)時(shí)性,二是沒有把C#托管資源和非托管資源的管理統(tǒng)一起來(lái),造成概念割裂
5. .NET類型分兩大類:引用類型、值類型,值類型分配在棧上,不需要GC回收;引用類型分配在堆上,它的釋放和回收需要GC來(lái)完成。一個(gè)引用類型的對(duì)象要被回收,需要要成為垃圾
6. 系統(tǒng)為GC安排了獨(dú)立線程,對(duì)于內(nèi)存回收GC采取了一定的優(yōu)先算法進(jìn)行輪循回收內(nèi)存資源
7. Generation(代),為了提高性能,越老的對(duì)象存活的越久。.NET中一般分為三代,G0,G1,G2;G0***被回收。
8. 垃圾回收的步驟,標(biāo)記->整理->終結(jié)
9. GC.Collect()一般要和GC.SuppressFinalize函數(shù)配合使用,使用GC.SuppressFinalize函數(shù),防止清理沖突。
新聞標(biāo)題:.NET垃圾回收機(jī)制知識(shí)點(diǎn)整理
URL分享:http://www.dlmjj.cn/article/dhohphc.html


咨詢
建站咨詢
