ASP.NET ViewState 初探 (3) 轉(zhuǎn)自msdn_第1頁
ASP.NET ViewState 初探 (3) 轉(zhuǎn)自msdn_第2頁
ASP.NET ViewState 初探 (3) 轉(zhuǎn)自msdn_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、    選擇會話狀態(tài)還是 ViewState?在某些情況下,將狀態(tài)值保存在 ViewState 中并不是最佳選擇,最常用的替代方法就是會話狀態(tài),它通常更適用于:大量的數(shù)據(jù)。由于 ViewState 增加了發(fā)送到瀏覽器的頁面的大?。℉TML 有效負(fù)載),同時(shí)也增加了回傳的窗體的大小,因此不適合存儲大量數(shù)據(jù)。 未在 UI 中顯示的安全數(shù)據(jù)。盡管 ViewState 數(shù)據(jù)已被編碼,并且可以選擇對其進(jìn)行加密,但始終不將數(shù)據(jù)發(fā)送到客戶端才是最安全的。因此,會話是更安全的選擇。(由于數(shù)據(jù)庫需要額外的憑據(jù)進(jìn)行驗(yàn)證,因此將數(shù)據(jù)存儲在數(shù)據(jù)庫中會更安全??梢蕴砑?SSL 以

2、獲得更安全的鏈接。)但是,如果在 UI 中已經(jīng)顯示了該專用數(shù)據(jù),那么您應(yīng)該已經(jīng)確認(rèn)了鏈接的安全性。在這種情況下,將同樣的值放入 ViewState 不會降低安全性。 尚未序列化到 ViewState 中的對象,如 DataSet。ViewState 序列化程序只為一小部分常用的對象類型進(jìn)行了優(yōu)化,如下所示。其他可序列化的類型或許可以保留在 ViewState 中,但速度會變慢,并會生成一個非常大的 ViewState。 會話狀態(tài) ViewState 是否使用服務(wù)器資源? 是 否 是否超時(shí)? 是,20 分鐘后(默認(rèn)) 否 是否存儲所有 .NET 類型? 是 否,僅支持:String、Intege

3、r、Boolean、Array、ArrayList、Hashtable 和自定義 TypeConverter 是否增加“HTML 有效負(fù)載”? 否 是 使用 ViewState 獲得最佳性能使用 ViewState 時(shí),每個對象都必須先序列化到 ViewState 中,然后再通過回傳進(jìn)行反序列化,因此使用 ViewState 并非是沒有代價(jià)的。但是,如果遵循某些簡單的原則對 ViewState 的成本加以控制,則通常不會產(chǎn)生明顯的性能影響。在不需要時(shí)禁用 ViewState。下面的“減少使用 ViewState”一節(jié)將詳細(xì)介紹這一問題。 使用優(yōu)化過的 ViewState 序列化程序。上面列出的

4、類型具有專門的序列化程序,這些程序運(yùn)行速度很快,并已經(jīng)過優(yōu)化,可以生成很小的 ViewState。如果要序列化一個未在上面列出的類型,可以創(chuàng)建一個自定義 TypeConverter 來顯著提高它的性能。 盡量減少使用對象,如果可能,盡量減少放入 ViewState 中的對象的數(shù)目。例如,不要使用二維字符串?dāng)?shù)組(名稱/值,其對象的數(shù)目與數(shù)組的長度一樣多),而應(yīng)使用兩個字符串?dāng)?shù)組(只有兩個對象)。但是,在將兩個已知類型存儲在 ViewState 中之前,在這兩者之間轉(zhuǎn)換不會獲得任何性能提高,因?yàn)檫@樣做實(shí)際上相當(dāng)于付出了兩次轉(zhuǎn)換的代價(jià)。 減少使用 ViewState默認(rèn)情況下 ViewState 將

5、被啟用,并且是由每個控件(而非頁面開發(fā)人員)來決定存儲在 ViewState 中的內(nèi)容。有時(shí),這一信息對應(yīng)用程序并沒有什么用處。盡管也沒什么害處,但卻會明顯增加發(fā)送到瀏覽器的頁面的大小。因此如果不需要使用 ViewState,最好還是將它關(guān)閉,特別是當(dāng) ViewState 很大的時(shí)候??梢曰诿總€控件、每個頁面或每個應(yīng)用程序來關(guān)閉 ViewState。在以下情況中將不再需要 ViewState:頁面 控件 頁面不回傳給自身。 處理的不是控件的事件。 控件沒有動態(tài)的或數(shù)據(jù)綁定的屬性值(或?qū)τ诿恳粋€請求它們都設(shè)置在代碼中)。 DataGrid 控件是 ViewState 的一個重量級用戶。默認(rèn)情況

6、下,在網(wǎng)格中顯示的所有數(shù)據(jù)也都存儲在 ViewState 中,當(dāng)需要一個復(fù)雜的操作(如復(fù)雜的搜索)來獲取數(shù)據(jù)時(shí),這是非常有用的。但是,DataGrid 的這種行為有時(shí)也使得 ViewState 成為累贅。例如,這里有一個簡單的頁面就屬于上述情況。因?yàn)轫撁娌换貍鹘o自身,所以它并不需要 ViewState。圖 3:帶有 DataGrid1 的簡單頁面 LessViewState.aspx<% Import Namespace="System.Data" %><html><body><form runat="server&quo

7、t;><asp:DataGrid runat="server" /></form></body></html><script runat="server">Private Sub Page_Load(sender As Object, e As EventArgs) Dim ds as New DataSet()ds.ReadXml(Server.MapPath("TestData.xml")DataGrid1.DataSource = dsDataGrid1.Data

8、Bind()End Sub</script>啟用 ViewState 時(shí),這個小網(wǎng)格會給該頁面增加 3000 多字節(jié)的 HTML 有效負(fù)載!使用 ASP.NET Tracing(英文)或查看發(fā)送到瀏覽器的頁面的源代碼(如以下代碼所示),可以清楚地看到這一點(diǎn)。<HTML><HEAD><title>減少頁面的“HTML 有效負(fù)載”</title></HEAD><body><form name="_ctl0" method="post" action="less

9、viewstate.aspx" id="_ctl0"><input type="hidden" name="_VIEWSTATE" value="dDwxNTgzOTU2ODA7dDw7bDxpPDE+Oz47bDx0PDtsPGk8MT47PjtsPHQ8QDA8cDxwPGw8UGFnZUNvdW50O18hSXRlbUNvdW50O18hRGF0YVNvdXJjZUl0ZW1Db3VudDtEYXRhS2V5czs+O2w8aTwxPjtpPDg+O2k8OD47bDw+Oz4+Oz47Ozs7O

10、zs7OztAMDxAMDxwPGw8SGVhZGVyVGV4dDtEYXRhRmllbGQ7U29ydEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPHB1Yl9pZDtwdWJfaWQ7cHViX2lkO288Zj47Pj47Ozs7PjtAMDxwPGw8SGVhZGVyVGV4dDtEYXRhRmllbGQ7U29ydEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPHB1Yl9uYW1lO3B1Yl9uYW1lO3B1Yl9uYW1lO288Zj47Pj47Ozs7PjtAMDxwPGw8SGVhZGVyVGV4dDtEYXRhRmllbGQ7U29yd

11、EV4cHJlc3Npb247UmVhZE9ubHk7PjtsPGNpdHk7Y2l0eTtjaXR5O288Zj47Pj47Ozs7PjtAMDxwPGw8SGVhZGVyVGV4dDtEYXRhRmllbGQ7U29ydEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPHN0YXRlO3N0YXRlO3N0YXRlO288Zj47Pj47Ozs7PjtAMDxwPGw8SGVhZGVyVGV4dDtEYXRhRmllbGQ7U29ydEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPGNvdW50cnk7Y291bnRyeTtjb3VudHJ5O288Zj47Pj47Ozs7Pjs+Oz47bDxpPDA+Oz47bDx0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論