C#繼承IDisposable釋放資源

來源:互聯網
上載者:User

標籤:

public class CDisposable : IDisposable    {            //解構函式,編譯後變成 protected void Finalize(),GC會在回收對象前會調用調用該方法             ~CDisposable()             {                 Dispose(false);             }               //通過實現該介面,客戶可以顯式地釋放對象,而不需要等待GC來釋放資源,據說那樣會降低效率             void IDisposable.Dispose()             {                 Dispose(true);             }               //將釋放非託管資源設計成一個虛函數,提供在繼承類中釋放基類的資源的能力             protected virtual void ReleaseUnmanageResources()             {                 //Do something...                 Console.WriteLine("Do something... ");            }               //私人函數用以釋放非託管資源             private void Dispose(bool disposing)             {                 ReleaseUnmanageResources();                   //為true時表示是客戶顯式調用了釋放函數,需通知GC不要再調用對象的Finalize方法                 //為false時肯定是GC調用了對象的Finalize方法,所以沒有必要再告訴GC你不要調用我的Finalize方法啦                 if (disposing)                 {                     GC.SuppressFinalize(this);                 }             }  
 public static void ShowResults()        {            //Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));            int sms = Environment.TickCount;            Console.WriteLine(sms.ToString());            int i = 0;            while (i < 100)            {                //tmpObj1沒有手工釋放資源,就等著GC來慢慢的釋放它吧                 CDisposable tmpObj1 = new CDisposable();                i++;            }            int mms = Environment.TickCount;            Console.WriteLine(mms - sms);            //Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));            i = 0;            while (i < 100)            {                Console.Write("     ");                //tmpObj2調用了Dispose方法,傳說比等著GC來釋放它效率要調一些                 //個人認為是因為要逐個對象的查看其中繼資料,以確認是否實現了Dispose方法吧                 //當然最重要的是我們可以自己確定釋放的時間以節省記憶體,最佳化程式運行效率                 CDisposable tmpObj2 = new CDisposable();                ((IDisposable)tmpObj2).Dispose();                i++;            }            int ems = Environment.TickCount;            Console.WriteLine(ems - mms);            //Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));        } 

 

C#繼承IDisposable釋放資源

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.