ASP.NET VIEWSTATE初探[2]

發表于:2010-05-18來源:作者:點擊數: 標簽:VIEWSTATEViewStateAsp初探Net
ASP.NET VIEWSTATE初探[2] 軟件測試 三、充分利用 ViewState ViewState 為跨回傳跟蹤控件的狀態提供了一條神奇的途徑,因為它不使用 服務器 資源、不會超時,并且適用于任何瀏覽器。如果您要編寫控件,那么肯定需要了解如何在控件中維護狀態(英文)。 開發人

  ASP.NET VIEWSTATE初探[2]   軟件測試

  三、充分利用 ViewState

  ViewState 為跨回傳跟蹤控件的狀態提供了一條神奇的途徑,因為它不使用服務器資源、不會超時,并且適用于任何瀏覽器。如果您要編寫控件,那么肯定需要了解如何在控件中維護狀態(英文)。

  開發人員在編寫頁面時同樣可以按照幾乎相同的方式來利用 ViewState,只是有時頁面會包含不由控件存儲的 UI 狀態值。您可以跟蹤 ViewState 中的值,使用的編程語法與會話和高速緩存的語法類似。

  四、選擇會話狀態還是 ViewState?

  在某些情況下,將狀態值保存在 ViewState 中并不是最佳選擇,最常用的替代方法就是會話狀態,它通常更適用于:

  1)大量的數據。由于 ViewState 增加了發送到瀏覽器的頁面的大小(HTML 有效負載),同時也增加了回傳的窗體的大小,因此不適合存儲大量數據。

  2)未在 UI 中顯示的安全數據。盡管 ViewState 數據已被編碼,并且可以選擇對其進行加密,但始終不將數據發送到客戶端才是最安全的。因此,會話是更安全的選擇。(由于數據庫需要額外的憑據進行驗證,因此將數據存儲在數據庫中會更安全??梢蕴砑?SSL 以獲得更安全的鏈接。)但是,如果在 UI 中已經顯示了該專用數據,那么您應該已經確認了鏈接的安全性。在這種情況下,將同樣的值放入 ViewState 不會降低安全性。

  3)尚未序列化到 ViewState 中的對象,如 DataSet。ViewState 序列化程序只為一小部分常用的對象類型進行了優化,如下所示。其他可序列化的類型或許可以保留在 ViewState 中,但速度會變慢,并會生成一個非常大的 ViewState。

  五、使用 ViewState 獲得最佳性能

  使用 ViewState 時,每個對象都必須先序列化到 ViewState 中,然后再通過回傳進行反序列化,因此使用 ViewState 并非是沒有代價的。但是,如果遵循某些簡單的原則對 ViewState 的成本加以控制,則通常不會產生明顯的性能影響。

  1)在不需要時禁用 ViewState。下面的“減少使用 ViewState”一節將詳細介紹這一問題。

  2)使用優化過的 ViewState 序列化程序。上面列出的類型具有專門的序列化程序,這些程序運行速度很快,并已經過優化,可以生成很小的 ViewState。如果要序列化一個未在上面列出的類型,可以創建一個自定義 TypeConverter 來顯著提高它的性能。

  3)盡量減少使用對象,如果可能,盡量減少放入 ViewState 中的對象的數目。例如,不要使用二維字符串數組(名稱/值,其對象的數目與數組的長度一樣多),而應使用兩個字符串數組(只有兩個對象)。但是,在將兩個已知類型存儲在 ViewState 中之前,在這兩者之間轉換不會獲得任何性能提高,因為這樣做實際上相當于付出了兩次轉換的代價。

  六、減少使用 ViewState

  默認情況下 ViewState 將被啟用,并且是由每個控件(而非頁面開發人員)來決定存儲在 ViewState 中的內容。有時,這一信息對應用程序并沒有什么用處。盡管也沒什么害處,但卻會明顯增加發送到瀏覽器的頁面的大小。因此如果不需要使用 ViewState,最好還是將它關閉,特別是當 ViewState 很大的時候。

  可以基于每個控件、每個頁面或每個應用程序來關閉 ViewState。在以下情況中將不再需要 ViewState:

  頁面:頁面不回傳給自身。

  控件:1)處理的不是控件的事件。 2)控件沒有動態的或數據綁定的屬性值(或對于每一個請求它們都設置在代碼中)。

  DataGrid 控件是 ViewState 的一個重量級用戶。默認情況下,在網格中顯示的所有數據也都存儲在 ViewState 中,當需要一個復雜的操作(如復雜的搜索)來獲取數據時,這是非常有用的。但是,DataGrid 的這種行為有時也使得 ViewState 成為累贅。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97