.NET 應用程式運行於受控環境,記憶體管理交由垃圾回收器(GC)負責。這與傳統原生環境截然不同:不再手動管理記憶體、無記憶體洩漏、無野指標、無未初始化指標問題。但非受控資源(檔案控制代碼、資料庫連線、GDI+ 物件、COM 物件等)仍由開發者負責釋放。
DataSet 內部擁有複雜雙向參考網(DataTable ↔ DataRow ↔ DataColumn、DataView 等),GC 能正確識別整個圖在根節點斷開後不可達,一次回收。無需手動斷開循環參考。
C# 無確定性解構函式。完成項(~Class())在 GC 回收前由專用完成項執行緒呼叫,時機不可預測。C++ RAII 模式(建構獲取資源、解構釋放資源)在 C#不適用:
// C++ 風格:危險!
class CriticalSection {
CriticalSection() { EnterCriticalSection(); }
~CriticalSection() { ExitCriticalSection(); } // 何時執行?不可知!
}
完成項延遲導致:
using / try/finally 確保 Dispose() 執行。GC.SuppressFinalize(this):主動釋放後移除完成項排程,避免效能損失。GC 管記憶體,非受控資源管自己。完成項是代價高昂的安全網,
IDisposable才是正規釋放管道。善用using,讓資源生命週期可見、可控、高效。