CLR via C# 讀書筆記 5-2 為什么不使用Finalize
1.在創(chuàng)建對象的時候,Finalize需要更多的時間, 因為需要把對象放到Finalization List 中
2.Finalize會讓你的應(yīng)用程序運行的更慢,因為在GC的時候需要對每個對象執(zhí)行額外的檢查
3.Finalize會對內(nèi)存造成更大的壓力(Heap的內(nèi)存分配問題)
4.Finalize執(zhí)行時間是不確定的,如果是使用需要獨占的資源例如File, 那么下一個想使用文件的人無法確定什么時候才能使用它所需要的文件, 這種情況還是盡快使用Dispose或者Close釋放資源比較好,
這同時意味著,你無法手動控制Finalize的執(zhí)行和它的執(zhí)行順序
PS:什么時候執(zhí)行Finalize
??1.托管堆中0代對象已滿,這個時候會啟動GC
2.代碼顯式執(zhí)行GC.Collect 方法
3.系統(tǒng)內(nèi)存太低.
4.卸載一個應(yīng)用程序域(AppDomain)
5.CLR被關(guān)閉
PS:Finalize執(zhí)行超時
單個方法的Finalize執(zhí)行超時的時間是2秒
所有對象的Finalize時間總和不能超過40秒
浙公網(wǎng)安備 33010602011771號