.NET之ASP Web Application快速入門(2) (轉載)
來源:互聯網
上載者:User
application|web|快速入門 Application的生存期
一個ASP.NET application建立於伺服器第一次被請求時,在那之前不會
有ASP.NET代碼在執行。接受第一次請求後,一個HttpApplication執行個體
池被建立,並啟用了Application_OnStart事件。HttpApplication執行個體
處理這個請求及隨後發生的請求,直到最後的執行個體退出,接著就觸發
Application_OnEnd事件。
注意,在每一個執行個體中HttpApplication的Init以及Dispose方法都被調
用,因此在Application_OnStart 和 Application_OnEnd事件間將被
調用多次。在一個ASP.NET
application中,只有這些事件在所有HttpApplication執行個體中被共用。
關於多線程
如果我們以application範圍類型使用對象,我們就應該注意ASP.NET是
並發處理請求的,從而Application對象可以被多個線程所訪問。因此,
如果下面例子中的代碼在同一時間被不同的客戶機訪問,它就是危險的,
可能不會達到預期目的。為對照方便,我們列出了使用VB、C#以及
JScript三種語言編寫的代碼:
C#
<%
Application["counter"] = (Int32)Application["counter"] + 1;
%>
VB
<%
Application("counter") = CType(Application("counter") + 1,
Int32)
%>
JScript
<%
Application("counter") = Int32(Application("counter") + 1);
%>
為了實現安全的線程處理,我們可以通過Lock和Unlock方法處理這個
Application對象。請看下面使用VB、C#以及JScript三種語言編寫的代
碼:
C#
<%
Application.Lock();
Application["counter"] = (Int32)Application["counter"] + 1;
Application.UnLock();
%>
VB
<%
Application.Lock()
Application("counter") = CType(Application("counter") + 1,
Int32)
Application.UnLock()
%>
JScript
<%
Application.Lock();
Application("counter") = Int32(Application("counter") + 1);
Application.UnLock();
%>