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

C#.NET 非受控資源清理:Finalize 機制與 Dispose 模式(二)

     編輯:關於C語言

深入解析 Finalize 內部運作:GC 將有終結器的物件放入終結器佇列,由專用執行緒執行,導致物件至少存活兩代 GC 才能回收,效能較差。

Dispose 模式實作

public class MyResourceRelease : IDisposable {
    private bool _alreadyDisposed = false;
    protected virtual void Dispose(bool isDisposing) {
        if (_alreadyDisposed) return;
        if (isDisposing) { /* 釋放受控資源 */ }
        /* 釋放非受控資源 */
        _alreadyDisposed = true;
    }
    public void Dispose() { Dispose(true); }
}

派生類別傳播

public class MyDerivedResource : MyResourceRelease {
    private bool _disposed = false;
    protected override void Dispose(bool isDisposing) {
        if (_disposed) return;
        try {
            if (isDisposing) { /* 釋放衍生類受控資源 */ }
            /* 釋放衍生類非受控資源 */
            _disposed = true;
        } finally { base.Dispose(isDisposing); }
    }
}

缺點:呼叫端必須顯式呼叫 Dispose() 或使用 using,否則非受控資源洩漏。

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