[翻譯]ASP.NET 2.0網站應用程式的效能優化

哈哈哈哈哈我撒發表於2009-07-08

 

摘要:

  開發一個對使用者的請求做出很快回應的應用程式是每個開發者的目標和挑戰!ASP.NET是為速度優化和效能改進而設計的,它的改進體現在在服務端的頁編譯和自動儲存。然而,當你的應用程式在同一時間內執行大量的請求時,這項改進仍然無法防止效能的降低。

  為了寫一個高效能的應用程式,你必需平衡通常影響效能的四個方面. 表現如下:

   執行時間:執行一個請求所花的時間,從接收到第一個位元組算起到接收到最後一個位元組所花的時間。

   響應時間:從傳送請求到伺服器響應接收到第一個位元組所花的時間。

   伸縮性:這個主要表現在伺服器分配給應用程式的資源(記憶體,CPU或電腦)。

   吞吐量:在一個單位時間內(通常是1秒)能夠處理請求的數量。

  以下是能夠讓你開發出一個高效能應用程式的幾個方面:

   狀態管理,
   
   資料儲存,

   頁面和伺服器控制元件,

   網頁應用程式,

   程式碼實踐。

  我們先從前面兩個方面來展開說明,在下一篇文章中將涵概後面三個方面的內容,以及快取技術將在快取優化的文章裡詳細講解。

狀態管理:

  以下列出的一些建議指出怎樣更有效的執行狀態管理:

  SessionState 語句:

  
當你不用Session時請關閉Session狀態,並不是所有的網站都會儲存每個使用者Session狀態。當你禁用不必要的Session狀態時你的網站效能將會有所提高。在網頁中禁Session狀態請用下面的程式碼:

1    <%@ page EnableSessionState="false" %>
2


 如果你的頁面只要求讀取Session的值,你可以將其設為只讀。如果要禁用整個網站的Session會話可以開啟Web.config檔案,將SessionState節點的mode屬性設定為false,程式碼如下:

1 <SessionState mode="off" />

  Session State Provider 

  不只一個儲存Session狀態資料的方式,你可以從Web.config檔案中的SessionState節點的Mode屬性中設定你所喜歡的方式來儲存其資料。它所支援的儲存方式包括:in-process模式,state server模式,Sql server模式以及自定義模式。每一種模式在選定的環境下都有其自身的優勢。in-process模式是至今最快的一種模式,如果你想用Session來儲存一些小而且經常變動的資料,這種模式是你理想的選擇。如果你想在重起你的伺服器後仍然維持你的Session狀態,state server模式和SQL Server模式是不錯的選擇。

資料儲存:

  以下幾點指出怎麼更有效的進行資料儲存:

  應用SQL server provider

  
Sql server provider能夠開發更高效的網站應用程式以及更好的擴充套件性。

  應用SQL DATA READER

  SqlDataReader類在整個執行過程中只檢索中一次資料,因此在條件允許的情況下應用SqlDataReader類來替代DataSet,DataTable等,這樣能給你的應用程式帶來更高的效能。

  應用儲存過程

  儘可能的用儲存過程來代替命令語句,因為儲存過程是經過編譯以後執行的,這樣就能夠提高資料庫處理速度。

  應用SqlDataSource的相關屬性

  替換包括"Where"或"Sort by"的SQL條件語句,充分利用SqlDataSource的相關屬性(如:
caching, filtering, sorting)
你可以將SqlDataSource物件的"EnableCaching"屬性設定為true以啟用將所檢索的資料快取於這個DataSource中。當你啟用快取時,SqlDataSource物件將對所檢索的快取資料中執行如filtering和Sorting。可以應用SqlDataSource物件的FilterExpression和SortParameterName兩個屬性來對資料進行過濾和排序操作。這樣肯定能夠提高你網站的效能。

  ViewState加密
 
  為了提高安全性,必須將重要的儲存在ViewState的資料進行加密解密,但這樣會對你的應用程式的速度帶來一定的影響。加密包括一個以裝載的物件初始化加上一個未載入的資料的大小,如果資料越大所耗的時間也越長,因此應對ViewState資料視其重要性而進行適當的加密。

  分頁

  眾所周知,如果你要顯示一個給定資料來源的資料,你必須用一些像:GridView或DetailsView等伺服器控制元件,並將其資料來源進行邦定。你可能將會通過GridView
DetailsView來對資料來源的記錄或列進行篩選,將其paging屬性設為true。這種分頁技術叫做UI分頁(User Interface paging)。為了實現這項功能,GridView控制元件會請求獲取特殊的資料來源,從中獲取當前頁面所需要的所有記錄而忽視其他的資料。在每一頁中都需要執行這樣的操作,這樣當然造成資源很大的浪費。

  還有一個技術能實現這種功能,這中技術就是資料來源分頁技術。這種技術將藉助於data source控制元件來實現,DataSourceView就是處理類,當GridView或DetailsView應用到此資料來源時將其CanPage屬性設為true。這樣資料來源將只取當前頁的資料,可以看出資料來源分頁比UI分頁更有效。唯一可以讓資料來源分頁的為ObjectDataSource類。

  快取

  應用快取能夠其他任何技術更能提高你網站的效能。.NET 框架提供了幾種快取頁面的通道以及在ASP.NET應用程式中快取資料的方法。你可以將很重要而又在各個請求中不變的資料或頁面進行快取。

  為了能夠使快取更有效,請看以下幾點:

  -不要快取短時間過期的快取項,每一個快取項過期都涉及到快取的清理和垃圾的回收。

  -不要快取太大的快取項,這樣對每一項將消耗更多的記憶體。一些很容易計算等的資料就沒有必要進行快取。

  快取如此重要,Asp.NET框架給我們提供了多種的通道來逐漸改進我們的網站效能。這些方法包括:快取應用程式資料,頁面輸出快取,快取一個網頁和快取頁面中的一部分。

更多內容可以看MSDN。

  來源:http://www.cnblogs.com/xdotnet/archive/2007/03/08/translate_speed_optimization_first.html

 

相關文章