近期幾個ASP.NET開發經驗(二)

來源:互聯網
上載者:User
一:IHttpModule的Init()只執行一次:
IHtttpModule.Init()方法是在Application啟動時進行一些初始化操作,因此,該方法只需要而且也只會執行一次.
因此,在該方法裡調用的方法也只會執行一次(我們可以在其中實現Timer,FileSystemWatcher等的操作).
當然,其中的Application相關事件是在這一步註冊.
----
需要注意的是,有些情況下,Init()也會多次執行,比如使用架構時就會執行不止一次...
http://www.cnblogs.com/redfire0922/archive/2007/03/15/675549.html
這裡有位朋友就碰到類似問題.

二:記憶體回收,Dispose,Close,Finalie(C#中的解構函式)
.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        }

相關文章

聯繫我們

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