ASP.NET應用程式效能最佳化
一. 頁面和伺服器處理
1. 避免與伺服器端的往返行程
eg: a. 一次讀取大量資料,在用戶端處理之後再同意向資料庫提交;
b. ajax,前端頁面不重新整理,單獨線程與伺服器互動,減少伺服器往返可以提高效能。
2. 用IsPostback避免往返過程中的額外操作
頁面事件程序:Page_PreInit -> Page_Init -> Page_Load -> Control events -> Page_PreRender -> Page_Unload
任何 page 載入都要走一個完整的頁面過程,使用 IsPostback 可以過濾一些步驟。
3. 謹慎使用伺服器端控制項
伺服器控制項封裝一些事件,更占開銷。可以考慮使用 Html 控制項。
4. 檢視狀態 ViewState
關閉整個頁面的試圖狀態 <%@ EnableViewState="false"%>,也可以關閉指定控制項試圖狀態。
二. 狀態處理
1. 禁用繪畫狀態
a. 在會話未被使用時,禁用會話
<%@ Page EnableSessionState="false"%>
b. 使用唯讀繪畫
<%@ Page EnableSessionState="ReadOnly"%>
c. 禁用 Web Service 的胡話狀態
[WebMethod(false)]
[WevMethod(EnableSession=false)]
d. 禁用應用程式繪畫
在 web.config 中<sessionState Mode="Off">
2. 謹慎選擇工作階段狀態提供者
a. 進程內繪畫狀態
asp.net 預設模式,速度最快。
僅在工作階段狀態中使用少量容易丟失的資料,不會對應用程式產生較大影響。
在 web.config 中<sessionState Mode="InProc">
b. Windows 服務 進程外工作階段狀態
在 web.config 中<sessionState Mode="StateServer" stateConnectionstring=”tcpip=localhost:連接埠號碼”>
c. SQL Server 資料庫中的進程外工作階段狀態
在 web.config 中<sessionState Mode="SQLServer" allowCustomerDatabase=”false” stateConnectionstring=”database=資料庫名/sql2005;uid=sa”>
在控制台:aspnet_reg.exe –s 資料庫名\sql2005 –u –ssad –sstype p
三. 資料訪問
1. 將預存程序用於資料訪問
2. 使用SqlDataReader 獲得快進唯讀資料遊標
3. 儘可能快取資料和頁面輸出
不需要動態計算輸出的頁面,考慮使用頁面緩衝
注意:a. 不要使用太多緩衝(佔用伺服器記憶體)
b. 緩衝時間不能太短
四. Web引用程式
1. 大型應用程式,先執行先行編譯
2. 必要的時候,調整每個應用程式進程的線程數
3. 禁用偵錯模式
4. 最佳化應用程式設定檔
a. 是否需要身分識別驗證
b. 字元集(整站使用 ascii,配置成 utf-8,少許提高效能)
c. 清除HttpModual中不用的模組
五. 編碼最佳化
1. 不要依賴代碼中的異常捕獲,用判斷處理
2. 大量字串連結,使用StringBuilder
3. 不要使用過多記憶體
4. 盡量避免使用Finalize方法的對象,重寫Dispose方法