乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      NET 清理非托管資源

       昵稱10504424 2013-06-28
           類型的 Dispose 方法應(yīng)釋放它擁有的所有資源。它還應(yīng)該通過調(diào)用其父類型的 Dispose 方法釋放其基類型擁有的所有資源。該父類型的 Dispose 方法應(yīng)該釋放它擁有的所有資源并同樣也調(diào)用其父類型的 Dispose 方法,從而在整個(gè)基類型層次結(jié)構(gòu)中傳播此模式。若要確保始終正確地清理資源,Dispose 方法應(yīng)該可以被多次調(diào)用而不引發(fā)任何異常。Dispose 方法應(yīng)該為它處置的對象調(diào)用 GC.SuppressFinalize 方法。如果對象當(dāng)前在終止隊(duì)列中,GC.SuppressFinalize 防止其 Finalize 方法被調(diào)用。請記住,執(zhí)行 Finalize 方法會大大減損性能。如果您的 Dispose 方法已經(jīng)完成了清理對象的工作,那么垃圾回收器就不必再調(diào)用對象的 Finalize 方法。
      public class BaseResource: IDisposable
      {
      
         private IntPtr handle;
      
         private Component Components;
      
         // 對象是否已被釋放的標(biāo)志
         private bool disposed = false;
      
         public BaseResource()   {   }
      
         // 釋放資源,對外開放的可調(diào)用的方法
         public void Dispose()
         {
      
            Dispose(true);
      
            GC.SuppressFinalize(this);
         }
      
         // 釋放資源,如果disposing為true,釋放所有的托管資源和非托管資源,如果為false,則僅僅釋放非托管資源,這主要是為了避免在析構(gòu)函數(shù)中重復(fù)2次進(jìn)行垃圾回收
         protected virtual void Dispose(bool disposing)
         {
            // 檢查該對象是否已經(jīng)被釋放了
            if(!this.disposed)
            {
               if(disposing)
               {
      
                  Components.Dispose();
               }
      
               CloseHandle(handle);
               handle = IntPtr.Zero;
            }
      
            disposed = true;         
         }
      
         // 析構(gòu)函數(shù),又名終結(jié)器
         ~BaseResource()      
         {
            // 釋放非托管資源,在調(diào)用終結(jié)器方法時(shí)系統(tǒng)自動會對托管的資源進(jìn)行垃圾回收
            Dispose(false);
         }
      
         // 允許多次調(diào)用Dispose,但會拋出異常publicvoid DoSomething()
         {
            if(this.disposed)
            {
               thrownew ObjectDisposedException();
            }
         }
      }
      
           用 Finalize 方法回收對象使用的內(nèi)存需要至少兩次垃圾回收。當(dāng)垃圾回收器執(zhí)行回收時(shí),它只回收沒有終結(jié)器的不可訪問對象的內(nèi)存。這時(shí),它不能回收具有終結(jié)器的不可訪問對象。它改為將這些對象的項(xiàng)從終止隊(duì)列中移除并將它們放置在標(biāo)為準(zhǔn)備終止的對象列表中。該列表中的項(xiàng)指向托管堆中準(zhǔn)備被調(diào)用其終止代碼的對象。垃圾回收器為此列表中的對象調(diào)用 Finalize 方法,然后,將這些項(xiàng)從列表中移除。后來的垃圾回收將確定終止的對象確實(shí)是垃圾,因?yàn)闃?biāo)為準(zhǔn)備終止對象的列表中的項(xiàng)不再指向它們。在后來的垃圾回收中,實(shí)際上回收了對象的內(nèi)存。

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多