之前在做一些基於.NET WEB 應用的效能測試時,測試載入器經常會錄製到 __VIEWSTATE 這個隱藏的屬性,並且經常發現這個屬性在“關聯”時會存在一些問題,導致請求失敗;有時這個屬性的值還會非常的長——例如超過2000位元組,還一遍遍的在指令碼中重複出現,嚴重影響指令碼的可讀性。
所以一般都會在web.config中禁用這個東東,不過也的確沒有深入研究一下這個東西到底是幹嘛的,為什麼會出現,禁用到底對測試的真實性有什麼影響。
今天有點空,找到一篇比較權威的資料,瞭解了一下。
ASP.NET ViewState初探 http://www.microsoft.com/china/community/program/originalarticles/techdoc/viewstate.mspx
下面是一點摘要。
-------------- BEGIN ---------------
ViewState(英文)是一種機制,ASP.NET 使用這種機制來Tracing Service器控制項狀態值,否則這些值將不作為 HTTP 表單的一部分而回傳。
ASP.NET ViewState 是一種新的狀態服務,可供開發人員基於每個使用者來跟蹤 UI 狀態。ViewState 沒有什麼神秘之處,它只是利用了一個老的 Web 編程技巧:在一個隱藏的表單欄位中來回傳遞狀態。
預設情況下 ViewState 將被啟用,並且是由每個控制項(而非頁面開發人員)來決定儲存在 ViewState 中的內容。有時,這一資訊對應用程式並沒有什麼用處。儘管也沒什麼害處,但卻會明顯增加發送到瀏覽器的頁面的大小。因此如果不需要使用 ViewState,最好還是將它關閉,特別是當 ViewState 很大的時候。
使用 ViewState 時,每個對象都必須先序列化到 ViewState 中,然後再通過回傳進行還原序列化,因此使用 ViewState 並非是沒有代價的。
禁用ViewState——應用程式(在 web.config 中): <Pages EnableViewState="false" ?/>
如果在應用中 ViewState 不是必須的,並且自動產生了一個很大的 ViewState 開始影響效能,就應該考慮禁用它。
-------------- END ---------------