明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

.NET之ASP Web Application迅速基礎(chǔ)(2)

[摘要].NET之ASP Web Application快速入門(2)  Application的生存期 一個(gè)ASP.NET application創(chuàng)建于服務(wù)器第一次被請求時(shí),在那之前不會(huì)有ASP.NET代碼在執(zhí)行。接受第一次請求后,一個(gè)HttpApplication實(shí)例池被創(chuàng)建,并激活了Applicat...
.NET之ASP Web Application快速入門(2) 
Application的生存期


一個(gè)ASP.NET application創(chuàng)建于服務(wù)器第一次被請求時(shí),在那之前不會(huì)有ASP.NET代碼在執(zhí)行。接受第一次請求后,一個(gè)HttpApplication實(shí)例池被創(chuàng)建,并激活了Application_OnStart事件。HttpApplication實(shí)例處理這個(gè)請求及隨后發(fā)生的請求,直到最后的實(shí)例退出,接著就觸發(fā)Application_OnEnd事件。

注意,在每一個(gè)實(shí)例中HttpApplication的Init以及Dispose方法都被調(diào)用,因此在Application_OnStart 和 Application_OnEnd事件間將被調(diào)用多次。在一個(gè)ASP.NET
application中,只有這些事件在所有HttpApplication實(shí)例中被共享。

關(guān)于多線程


如果我們以application范圍類型使用對象,我們就應(yīng)該注意ASP.NET是并發(fā)處理請求的,從而Application對象可以被多個(gè)線程所訪問。因此,如果下面例子中的代碼在同一時(shí)間被不同的客戶機(jī)訪問,它就是危險(xiǎn)的,可能不會(huì)達(dá)到預(yù)期目的。為對照方便,我們列出了使用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);
%>


為了實(shí)現(xiàn)安全的線程處理,我們可以通過Lock和Unlock方法處理這個(gè)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();
%>