ApplicationState
應(yīng)用程序狀態(tài)是指采用HttpApplicationState實(shí)現(xiàn)的狀態(tài)維持方式,使用代碼如下:
Application.Lock(); Application["PageRequestCount"] = ((int)Application["PageRequestCount"]) + 1; Application.UnLock();
對(duì)于這種方法,我不建議使用,因?yàn)椋?br />1. 與使用靜態(tài)變量差不多,直接使用靜態(tài)變量可以不需要字典查找。
2. 選擇強(qiáng)類型的集合或者變量可以避免裝箱拆箱。
ViewState,ControlState
視圖狀態(tài),控件狀態(tài),二者是類似,在頁(yè)面中表現(xiàn)為一個(gè)hidden-input元素:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="......................" />
控件狀態(tài)是ASP.NET 2.0中引入,與視圖狀態(tài)相比,它不允許關(guān)閉。
由于它們使用方式一致,而且視圖狀態(tài)是基于控件狀態(tài)的實(shí)現(xiàn)邏輯,所以我就不區(qū)分它們了。
在ASP.NET的早期,微軟為了能幫助廣大開發(fā)人員提高開發(fā)效率,引用入一大批的服務(wù)端控件,并為了能將事件編程機(jī)制引入ASP.NET中,又發(fā)明了ViewState。
這種方式雖然可以簡(jiǎn)化開發(fā)工作量,然而卻有一些限制和缺點(diǎn):
1. 視圖狀態(tài)的數(shù)據(jù)只能用于回發(fā)(postback)。
2. 視圖狀態(tài)的【濫用】容易導(dǎo)致生成的HTML較大,這會(huì)引起一個(gè)惡性循環(huán):
a. 過大的ViewState在序列化過程中會(huì)消耗較多的服務(wù)器CPU資源,
b. 過大的ViewState最終生成的HTML輸出也會(huì)很大,它會(huì)浪費(fèi)服務(wù)端網(wǎng)絡(luò)資源,
c. 過大的ViewState輸出導(dǎo)致表單在下次提交時(shí),會(huì)占用客戶端網(wǎng)絡(luò)資源。
d. 過大的ViewState數(shù)據(jù)上傳到服務(wù)端后,反序列化又會(huì)消耗較多的服務(wù)器CPU資源。
因此,整個(gè)交互過程中,用戶一直在等待,用戶體驗(yàn)極差。
在ASP.NET興起的年代,ViewState絕對(duì)是個(gè)了不起的發(fā)明。
然而,現(xiàn)在很多關(guān)于ASP.NET性能優(yōu)化的方法中,都會(huì)將【關(guān)閉ViewState】放在頭條位置。
為什么會(huì)這樣呢,大家可以自己思考一下了。
有些人認(rèn)為:我現(xiàn)在做的程序只是在局域網(wǎng)內(nèi)使用,使用ViewState完全沒有問題!
然而,那些人或許沒有想過:
1. 未來用戶可能會(huì)把它部署在互聯(lián)網(wǎng)上運(yùn)行(對(duì)于產(chǎn)品來說就是遇到大客戶了)。
2. 項(xiàng)目早期的設(shè)計(jì)與規(guī)劃,對(duì)后期的開發(fā)與維護(hù)來說,影響是巨大的,因?yàn)樵S多基礎(chǔ)部分通常是在早期開發(fā)的。
當(dāng)這二種情況的任何一種發(fā)生時(shí),想再禁用ViewState,可能已經(jīng)晚了。
對(duì)于視圖狀態(tài),我認(rèn)為它解決的問題比它引入的問題要多要復(fù)雜,
因此,我不想花時(shí)間整理它的優(yōu)缺點(diǎn),我只想說一句:把它關(guān)了,在web.config中關(guān)了。
另外,我不排斥使用服務(wù)器控件,我認(rèn)為:你可以使用服務(wù)端控件顯示數(shù)據(jù),但不要用它處理回發(fā)。
如果你仍然認(rèn)為視圖狀態(tài)是不可缺少的,那我還是建議你看看ASP.NET MVC框架,看看沒有視圖狀態(tài)是不是照樣可以寫ASP.NET程序。
本文導(dǎo)航
- 第1頁(yè): 首頁(yè)
- 第2頁(yè): QueryString
- 第3頁(yè): Cookie
- 第4頁(yè): ApplicationState
- 第5頁(yè): Session
- 第6頁(yè): Profile
- 第7頁(yè): 各種狀態(tài)管理對(duì)比