CLR via C# 讀書(shū)筆記 5-4 在使用非托管資源情況下的GC
有些時(shí)候,非托管資源會(huì)占用大量的內(nèi)存, 而托管資源只占用一點(diǎn)資源,那么GC很難估計(jì)是否應(yīng)該對(duì)這個(gè)資源進(jìn)行垃圾回收,因?yàn)楹茈y滿(mǎn)足原來(lái)提到過(guò)的GC回收的條件(例如Gnereation 0 滿(mǎn)了)
為了解決這個(gè)情況,GC提供了以下兩個(gè)方法
public static void AddMemoryPressure(Int64 bytesAllocated);
public static void RemoveMemoryPressure(Int64 bytesAllocated);
所有包含大型非托管資源的托管類(lèi)應(yīng)該使用這些方法告訴GC他們準(zhǔn)備使用多少內(nèi)存
由此,GC在內(nèi)部監(jiān)控內(nèi)存壓力,當(dāng)內(nèi)存壓力很大的時(shí)候,就會(huì)執(zhí)行一次GC
GC.AddMemoryPressure 和 HandleCollector.Add其實(shí)內(nèi)部也是使用GC.Collect方法來(lái)回收內(nèi)存
過(guò)多的調(diào)用GC.Collect在這里會(huì)造成性能損耗,不過(guò)性能損耗總比程序崩潰來(lái)的好....
posted on 2010-12-09 14:46 聽(tīng)說(shuō)讀寫(xiě) 閱讀(323) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)