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

C#.NET 非受控資源清理:常見問題與解決方案(一)

     編輯:關於C語言

Code Review 發現兩類常見錯誤:

  1. 類別 A 實作 IDisposable,類別 B 含 A 欄位但未實作 IDisposable,導致 A 的資源無法及時釋放。
  2. 類別同時實作終結器與 IDisposable,但 Dispose() 未呼叫 GC.SuppressFinalize(this),造成物件滯留終結器佇列延遲回收。

解決方案

  • B 應實作 IDisposable,其 Dispose() 呼叫 A.Dispose()。
  • Dispose() 中必須呼叫 GC.SuppressFinalize(this) 移除終結器佇列登記。

兩種清理方式

  • Finalize:C# 以解構函式 ~A() 實作,由 GC 自動呼叫,時機不可控。
  • Dispose:實作 IDisposable,呼叫端主動控制釋放時機。

建議採用「雙重實作 + SuppressFinalize」最佳模式(見後續文章)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved