首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

CLR 記憶體配置與回收機制淺析(二)

     編輯:關於C語言

解構函數與 Finalize

C# 解構函數 ~ClassName() 編譯為 protected override void Finalize()。GC 回收前會呼叫 Finalize 釋放非託管資源,但會導致效能下降。

終結佇列機制

  • 具有 Finalize 的物件會被放入「終結佇列」
  • GC 回收時,無終結器的物件直接回收;有終結器的物件移至「準備終結清單」
  • 專用執行緒呼叫 Finalize,之後需下一次 GC 才真正回收記憶體
  • 至少需要兩次 GC 才能回收有終結器的物件

建議模式:實作 IDisposable

public void Dispose() {
    ReleaseMyResource();      // 釋放非託管資源
    base.Dispose();           // 釋放基類資源
    GC.SuppressFinalize(this); // 告知 GC 無需呼叫 Finalize
}

優點

  • 決定性釋放資源
  • 避免 Finalize 效能損耗
  • 符合 .NET Framework 設計規範
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved