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

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


咨詢
建站咨詢
