ASP.NET中application对象的用法(面试题)
ASP.NET中application對(duì)象的用法
本文導(dǎo)讀:Application對(duì)象是HttpApplicationState類的一個(gè)實(shí)例,Application狀態(tài)是整個(gè)應(yīng)用程序全局的。Application對(duì)象在服務(wù)器內(nèi)存中存儲(chǔ)數(shù)量較少又獨(dú)立于用戶請(qǐng)求的數(shù)據(jù)。由于它的訪問速度非常快而且只要應(yīng)用程序不停止,數(shù)據(jù)一直存在,我們通常在Application_Start的時(shí)候去初始化一些數(shù)據(jù),在以后的訪問中可以迅速訪問和檢索。
?
一、Application對(duì)象的理解
?Application對(duì)象在實(shí)際網(wǎng)絡(luò)開發(fā)中的用途就是記錄整個(gè)網(wǎng)絡(luò)的信息,如上線人數(shù)、在線名單、意見調(diào)查和網(wǎng)上選舉等。在給定的應(yīng)用程序的多有用戶之間共享信息,并在服務(wù)器運(yùn)行期間持久的保存數(shù)據(jù)。而且Application對(duì)象還有控制訪問應(yīng)用層數(shù)據(jù)的方法和可用于在應(yīng)用程序啟動(dòng)和停止時(shí)觸發(fā)過程的事件。
Global.asax(通常我們不改名)是一個(gè)用來處理應(yīng)用程序全局的事件。打開文件,系統(tǒng)已經(jīng)為我們定義了一些事件的處理方法。
?
?
????void?Application_Start(object?sender,?EventArgs?e)
????{
????????//?在應(yīng)用程序啟動(dòng)時(shí)運(yùn)行的代碼
????}???
?
????void?Application_End(object?sender,?EventArgs?e)
????{
????????//??在應(yīng)用程序關(guān)閉時(shí)運(yùn)行的代碼
????}???????
?
????void?Application_Error(object?sender,?EventArgs?e)
????{
????????//?在出現(xiàn)未處理的錯(cuò)誤時(shí)運(yùn)行的代碼
????}
?
????void?Session_Start(object?sender,?EventArgs?e)
????{
????????//?在新會(huì)話啟動(dòng)時(shí)運(yùn)行的代碼
????}
?
????void?Session_End(object?sender,?EventArgs?e)
????{
????????//?在會(huì)話結(jié)束時(shí)運(yùn)行的代碼
?
????????//?注意:?只有在?Web.config?文件中的?sessionstate?模式設(shè)置為InProc?時(shí),才會(huì)引發(fā)?Session_End?事件
?
????????//?如果會(huì)話模式設(shè)置為?StateServer?或?SQLServer,則不會(huì)引發(fā)該事件
????}
通過這些注釋我們可以看到,這些事件是整個(gè)應(yīng)用程序的事件,和某一個(gè)頁面沒有關(guān)系。
二、Application對(duì)象的應(yīng)用
?
1.使用Application對(duì)象保存信息
?
(1)、使用Application對(duì)象保存信息?
?
Application(“鍵名”)?=?值
或?Application(“鍵名”,值)
?
(2)、獲取Application對(duì)象信息
?
變量名?=?Application(“鍵名”)
或:變量名?=?Application.Item(“鍵名”)
或:變量名?=?Application.Get(“鍵名”)
?
(3)、更新Application對(duì)象的值
?
Application.Set(“鍵名”,?值)
?
(4)、刪除一個(gè)鍵
?
Application.Remove(“鍵名”,?值)
?
(5)、刪除所有鍵
?
Application.RemoveAll()
或Application.Clear()
?
2.有可能存在多個(gè)用戶同時(shí)存取同一個(gè)Application對(duì)象的情況
?
這樣就有可能出現(xiàn)多個(gè)用戶修改同一個(gè)Application命名對(duì)象,造成數(shù)據(jù)不一致的問題。
HttpApplicationState類提供兩種方法Lock和Unlock,以解決對(duì)Application對(duì)象的訪問同步問題,一次只允許一個(gè)線程訪問應(yīng)用程序狀態(tài)變量。
?關(guān)于鎖定與解鎖
鎖定:Application.Lock()
訪問:Application(“鍵名”)?=?值
解鎖:Application.Unlock()
注意:Lock方法和UnLock方法應(yīng)該成對(duì)使用。
可用于網(wǎng)站訪問人數(shù),聊天室等設(shè)備
3.?使用Application事件
在ASP.NET應(yīng)用程序中可以包含一個(gè)特殊的可選文件—Global.asax文件,也稱作ASP.NET應(yīng)用程序文件,它包含用于響應(yīng)ASP.NET或HTTP模塊引發(fā)的應(yīng)用程序級(jí)別事件的代碼。?
三、Application總結(jié)
?在ASP.NET?2.0中,Application已經(jīng)變得不是非常重要了。因?yàn)?/span>Application的自我管理功能非常薄弱,它沒有類似Session的超時(shí)機(jī)制。也就是說,Application中的數(shù)據(jù)只有通過手動(dòng)刪除或者修改才能釋放內(nèi)存,只要應(yīng)用程序不停止,Application中的內(nèi)容就不會(huì)消失。在下一節(jié)中,我們會(huì)看到,可以使用Cache實(shí)現(xiàn)類似Application的功能,同時(shí)Cache又有豐富而強(qiáng)大的自我管理機(jī)制。
總結(jié)一下Application的特性:
·?存儲(chǔ)的物理位置。服務(wù)器內(nèi)存。·?存儲(chǔ)的類型限制。任意類型。
·?狀態(tài)使用的范圍。整個(gè)應(yīng)用程序?!?存儲(chǔ)的大小限制。任意大小。
·?生命周期。應(yīng)用程序開始的時(shí)候創(chuàng)建(準(zhǔn)確來說是用戶第一次請(qǐng)求某URL的時(shí)候創(chuàng)建),應(yīng)用程序結(jié)束的時(shí)候銷毀。
·?安全與性能。數(shù)據(jù)總是存儲(chǔ)在服務(wù)端,安全性比較高,但不易存儲(chǔ)過多數(shù)據(jù)。
·?優(yōu)缺點(diǎn)與注意事項(xiàng)。檢索數(shù)據(jù)速度快,但缺乏自我管理機(jī)制,數(shù)據(jù)不會(huì)自動(dòng)釋放。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/qiushuixizhao/p/5148489.html
總結(jié)
以上是生活随笔為你收集整理的ASP.NET中application对象的用法(面试题)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【BZOJ2631】tree (LCT)
- 下一篇: PHP——面向对象