Application的生存期
一個(gè)ASP.NET application創(chuàng)建于服務(wù)器第一次被請(qǐng)求時(shí),在那之前不會(huì) 有ASP.NET代碼在執(zhí)行。接受第一次請(qǐng)求后,一個(gè)HttpApplication實(shí)例 池被創(chuàng)建,并激活了Application_OnStart事件。HttpApplication實(shí)例 處理這個(gè)請(qǐng)求及隨后發(fā)生的請(qǐng)求,直到最后的實(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范圍類型使用對(duì)象,我們就應(yīng)該注意ASP.NET是 并發(fā)處理請(qǐng)求的,從而Application對(duì)象可以被多個(gè)線程所訪問(wèn)。因此, 如果下面例子中的代碼在同一時(shí)間被不同的客戶機(jī)訪問(wèn),它就是危險(xiǎn)的, 可能不會(huì)達(dá)到預(yù)期目的。為對(duì)照方便,我們列出了使用VB、C#以及 JScript三種語(yǔ)言編寫(xiě)的代碼:
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)安全的線程處理,我們可以通過(guò)Lock和Unlock方法處理這個(gè) Application對(duì)象。請(qǐng)看下面使用VB、C#以及JScript三種語(yǔ)言編寫(xiě)的代 碼:
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(); %
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!