2009-08-28 106 views
0

海蘭,視圖狀態的優化

我感興趣的是在一個asp.net AJAX項目的一些一般的優化方法視圖狀態

(例如,以減少視圖狀態, 或者只是加快視圖狀態的大小不知何故, 或其他這應該是一個一般的討論:-))。

那麼您對ViewState使用哪種優化? Asp.net或Ajax框架提供了哪些可能性?

回答

2

@silky是對的,只要你可以禁用它。我們儘可能在儘可能多的控件上儘量保持禁用。

而且,一旦你使用盡可能少的,它可能是值得考慮的把這樣的事情在你的頁面(或更好的基本頁面類)

Protected Overrides ReadOnly Property PageStatePersister() As PageStatePersister 
    Get 
     Return New SessionPageStatePersister(Me) 
    End Get 
End Property 

但這取決於您擁有多少用戶以及您擁有多少內存,並假定您正在使用會話。

哦,在C#是:

protected override PageStatePersister PageStatePersister 
{ 
    get 
    { 
     return new SessionPageStatePersister(this); 
    } 
} 
+1

會話狀態非常糟糕,如果同時存在許多用戶,服務器上的大量內存使用最終會終止Web應用程序。 其他更好的方法是創建一個新的PageStatePersister類並將值存儲在臨時文件中,讓臨時文件準備好並在一段時間後刪除。 – 2009-08-28 08:13:26

+0

內存很髒便宜,即使在快速磁盤上訪問時間很慢,我寧願花一大筆錢在更多的RAM上,而不是綁在慢速磁盤上。 當然,我寧願不使用任何視圖狀態,但有時它會被使用。 – ilivewithian 2009-08-28 11:29:04

1

最佳優化:存儲更少的東西。

但你需要具體。你遇到問題了嗎?如果是,用什麼控制?你自己?其他?請擴大。

+0

我只是感興趣的其他人怎麼處理thier自己viewstate.As爲自己在很多情況下:

我已經通過擴展您可以參閱HiddenFieldPageStatePersister寫了關於如何做到這一點的文章我在不需要的情況下使用控件的視圖狀態。但仍然視圖狀態的大小仍然很大。如果可能的話,我想增加視圖狀態的加密級別 – 2009-08-28 08:06:56

+0

ViewState的「加密級別」?你什麼意思? ViewState沒有加密,它被編碼。我的方法是:我不會在視圖狀態下存儲太多內容。 – 2009-08-28 08:09:49

+0

你是對的我認爲編碼在某種程度上也有點壓縮viewstate.Right現在我不知道。 – 2009-08-28 08:40:21

2

禁用視圖顯式控制的狀態,例如,頁面上有許多控件,可能不需要視圖狀態,如菜單,某些超鏈接,某些顯示統計標籤等,關閉它們一點。

你還可以做的另一件事是,減少控制ID的長度,這將改善頁面大小到一個更好的水平。

你的控件ID就像下面

PageContainer1_MyLoginContainerUserControl1_MyLoginForm1_MyUsername1

PageContainer1_MyCustomerDataGrid1_item0_MyCustomerNameLabel

我知道這聽起來有點不好,但如果你注意到的網格/列表項把這樣的這麼多大牌控件ID,我們注意到通過減少ID中的某些字符也有助於改善頁面大小。在列表/ gridview等它提高了30%至40%,也嵌套用戶控制也不好,當你真的不認爲你需要控制的ID了,只是把它3個字母大的最大。

1

如果你從來沒有讀過TRULY Understanding ViewState,這樣做第一。

對於AJAX與ViewState的幫助,我只是推測這裏,但如果你有整個頁面在一個UpdatePanel你可能能夠禁用ViewState的整個頁面