淺談垃圾回收機制(GC)

摘要:淺談垃圾回收機制(GC)

.NET 有一個重要機制為垃圾回收機制

何時會引發?
1.物件以經沒有被任何的參照時(例如:物件變數被設為null)
2.變數超出有效範圍(例如:方法中的區域變數)
3.呼叫 System.GC.Collect (除非特定情況下,否則不建議使用)

垃圾回收機制發生時會去銷毀物件,這時會去執行解構子。

運作方式?
1.暫停應用程式的執行緒,建立一個物件與參考的對照表,不在對照表中的物件,就會被認定為垃圾物件
2.檢查垃圾物件中是否有解構子,如果有將其放置於一個稱為 freachable queue 的物殊佇列中
3.將垃圾物件中沒有解構子的物件清除掉,重新組合記憶體,更新其它還在使用中的物件參照
4.啟動應用程式的執行緒
5.在自已的執行緒中清除 freachable queue 裡的垃圾物件

所以一般都不建議實作解構子,因為應用程式的效能可能因此變慢。

替代方案:
實作 IDispose 介面的 Dispose() 方法來處理。
(註:就算給了 null ,也不代表馬上就由記憶體中銷毀,至於何時,就由GC自已決定)