記憶體回收,Dispose,Close,Finalie(C#中的解構函式)

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   使用   ar   資料   sp   

NET中的資源分託管和非託管,所謂的託管是指CLR(通用語言運行時)中進行管理的資源,它可以由CLR自動進行記憶體回收. 也就是大家熟知的GC(記憶體回收機制). 而對於 非託管資源,比如資料庫連接,COM串連等,那麼需要手動清理回收資源. 清理非託管資源,我們可以用解構函式來執行,雖然它的執行時機不確定,但終究會被執行. 當然還有Dispose()和Close()方法,兩者的區別在於,Close()後還要以用Open()開啟,而Dispose()則是徹底銷毀.
--- 使用解構函式時,需要GC.Collect()才會執行到(GC,Collect()在自動回收機制中會自動執行,也可以顯式調用它) 而Dispose()需要顯式地調用,或者使用using() ,但是,需要注意:在用解構函式時,至少分兩步走:調用函數,回收記憶體. 那麼,在用using()或*.Dispose()後,GC還會再去執行解構函式. 因此,在Dispose()裡,加上GC.SupressFinalize(this)來防止再次調用解構函式.
總結: Dispose()和Close()需要顯示調用,Dispose()可以通過using()調用.解構函式無法顯式調用. Dispose()和解構函式是銷毀對象,而Close()是關閉,可以通過Open()再開. 解構函式調用時機不確定,而Dispose()在顯式或Using()時執行,Close()在顯式時執行. 三者都是用來銷毀非託管對象. 一段經典的C#-Dispose:

 1private bool _isDisposed=false;  2~MyTest()  3        {  4            //this.Close();  5            Dispose(false);  6        }  7        /**//// <summary>  8        /// 記憶體釋放,需要此類執行個體顯式調用,如sql.Dispose();或Using()  9        /// </summary> 10        public void Dispose() 11        { 12            //IDisposable dispose = this as IDisposable; 13            //if(dispose!=null) 14            //{ 15            //    dispose.Dispose(); 16            //} 17            Dispose(true); 18            GC.SuppressFinalize(this); 19        } 20        protected virtual void Dispose(bool disposing) 21        { 22            if(!_isDisposed) 23            { 24                if(disposing) 25                { 26               //託管資源的釋放     27                } 28               //非託管資源的釋放 29                _isDisposed = true; 30            } 31        }

記憶體回收,Dispose,Close,Finalie(C#中的解構函式)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.