ASP.NET效能優化-頁面及控制元件

iDotNetSpace發表於2009-04-15

一談到ASP.NET系統,不得不談到的一個問題是效能優化.儘管ASP.NET本身速度在ASP基礎上快了很讀,但是如果優化做得不好,效果並不大明顯.所以本文專門從頁面和控制元件選擇等角度談談效能優化.效能優化是三兩句話說不清的,我所寫出的僅僅是冰山一角,效能的優化是靠平時經驗的積累和對程式的運作原理的不斷認知。

一、頁面的優化(.aspx)
  
主要針對幾個頁面屬性
  
1、EnableViewState(頁面的檢視狀態)。如果無特殊要求設定為false。使用ViewState ,每個物件都必須先序列化到 ViewState 中,然後再通過回傳進行反序列化,因此使用 ViewState是沒有代價的。儘量減少使用物件,如果可能,儘量減少放入 ViewState 中的物件的數目。下面情況基本上可以禁用viewstate:
  
(1)頁面控制元件 (.ascx)
(2)頁面不回傳給自身。
(3)無需對控制元件的事件處理。
(4)控制元件沒有動態的或資料繫結的屬性值(或對於每個postpack都在程式碼中處理)
  
單個頁面或每個頁面都禁用 ViewState,如下所示:單個頁面: 每個頁面:在 web.config 中 EnableSessionState保持預設值即可(如果頁面用到sessionstate它才會佔用資源)。EnableViewStateMac如果無安全上的特殊要求,保持預設值。
  
2、Pagelayout.頁面佈局模型。建議使用Flowlayout(元素不帶絕對定位屬性新增).Gridlayout(絕對定位屬性)由於採用絕對定位,將會比Flowlayout生產更多的程式碼,主要是控制元件的定位資訊。
  
3、專案釋出的時候切記解除頁面的Debug狀態。
  
4、Html語言的優化。我的建議是熟練掌握Html/javascript,少用vs.net2003自動生產的程式碼,它會自動生成一些無用的html程式碼。
  
5、smart navigation設定為true能讓使用者明顯的感覺效能提高。啟用此屬性後對客戶端和服務端影響不大.它能智慧涮新需要涮新需涮新的部分.

二、控制元件的選擇:
  
Html控制元件和伺服器控制元件的選擇。伺服器控制元件帶來的方便和功能上的實現是html控制元件所不能比擬的。但是是以犧牲伺服器端的資源來取得的。我個人建議:如果html控制元件達不到所要實現的功能,而且和一些指令碼語言(如javascrpt/vbscript)結合也不能實現的話。才會選擇伺服器控制元件。選擇伺服器控制元件後,也儘量對其控制元件優化,如取消一些頁面狀態等(具體看控制元件的優化)
  
伺服器控制元件的選擇:主要針對幾個常用資料控制元件說明一下:
  
DataGrid:自帶最強大的資料顯示控制元件,內建了對資料的修改、刪除、新增、分頁等很多實用功能。如果你只需對資料顯示的話,儘量不要選擇DataGrid(它把資料都儲存在viewstate中).也不要使用自帶的分頁功能,microsoft在自動分頁的底層做了很多工作,雖然使用方便了,但效能開銷大了。
  
DataList:比DataGrid功能少了很多。但自定義性強了很多。特有的多行資料顯示,給我們帶來了很多方便。DataGrid能實現的功能,它基本能實現。所以建議使用它。
  
Repeater:功能最少,但自定義性非常強。如果只需對資料顯示,建議使用。由於減少了很多功能,對伺服器的效能帶來消耗最小。因此,如果是對資料顯示的話,我基本上都是選擇Repeater然後DataList最後DataGrid
  
*儘量選擇html控制元件。能在客戶端實現的功能就在客戶端實現(熟練掌握javascript),減少伺服器的壓力。資料控制元件選擇順序:Repeater、DataList、DataGrid
  
三、伺服器控制元件的優化:
  
1、Viewstate
  
控制元件的viewstate與頁面的viewstate基本是一致的。用來儲存控制元件的一些狀態。處理原則和處理頁面的viewstate一樣。有興趣的可以用Datagrid繫結資料測試下viewstate儲存的資料量有多大,它所儲存的資料基本和Datagrid顯示的資料量大小是等同的。
  
2、Ispostpack
  
預設false.需要產生事件的時候才需設定為true.
  
控制元件的優化,主要看你對此控制元件的熟悉情況。對控制元件內部運作的原理越瞭解,就會對其作出合適的優化。 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-589268/,如需轉載,請註明出處,否則將追究法律責任。

相關文章