提高asp.net應用程式效能的一些技巧
來源:互聯網
上載者:User
1.消除資料繫結控制項的多重綁定
在綁定語句前加if (!Page.IsPostBck)語句,這樣只有在第一次載入頁面時,才進行綁定,頁面回送時就不能再次綁定了.
在PreRender方法裡綁定,PreRender事件發生在回送事件之後,在前面的事件(init,load,PostBackEvent)中處理完應該處理的事件後,在PreRender事件中綁定,這樣能消除在多個回傳事件中重複繫結控制項,這個方法僅用在多個回傳事件中要重複繫結控制項的情況下,因為PreRender事件每次回傳時都會觸發.
2.盡量減小ViewState的大小
ViewState的作用是用來儲存伺服器控制項(web server control)的狀態,用以在頁面回傳時還原控制項的值.如果我們在可以使用html控制項的地方(html控制項不會自動還原控制項的值,因此它不使用viewState),使用html控制項,而不是使用web server control,那麼將有效減小viewstate的大小,這樣頁面的體積就會減小.
在使用web server control時,如果只是在初始化頁面時綁定一次資料,或者在每次回送頁面時都要重新綁定資料,這種情況下可以不使用viewState,把控制項的EnabledViewState屬性設為false.特別是一些使用模板的控制項,如DataGrid,DataList等.對模板控制項禁用ViewState,將能有效提高效能.
3.Server.Transfer和Response.Redirect
在有可能的情況,盡量使用Server.Transfer方法替代Response.Redirect方法.Response.Redirect回傳一個回應標頭(Reponse heaer)到用戶端,使用戶端發一個新的Url請求到伺服器.而Server.Transfer方法可以避免回傳再請求這個過程,它只是簡單的實現了伺服器端的跳轉.
當然不能什麼時候都使用這種替換,因為Server.Transfer方法用了一個新Handler來處理新的請求.如果重新導向到的頁面需要驗證和授權訪問,就應該使用Response.Redirect方法.因為它們倆的機制不一樣.當你用Response.Redirect方法的時候,你要首先確定你用的是第二參數為bool型的重載方法,把這個參數設定為false傳進去以確保不會引發一個內部的異常.另一個要注意的地方是你只能要用Server.Transfer來把控制項傳給在同一個應用程式的某個頁面.要把控制項傳給另一個應用程式的頁面,你必須使用Response.Redirect方法,而不是Server.Transfer方法.
Server.Transfer方法把執行流程從當前的ASPX檔案轉到同一伺服器上的另一個ASPX頁面。調用Server.Transfer時,當前的ASPX頁面終止執行,執行流程轉入另一個ASPX頁面,但新的ASPX頁面仍使用前一ASPX頁面建立的應答流。
如果用Server.Transfer方法實現頁面之間的導航,瀏覽器中的URL不會改變,因為重新導向完全在伺服器端進行,瀏覽器根本不知道伺服器已經執行了一次頁面變換。
預設情況下,Server.Transfer方法不會把表單資料或查詢字串從一個頁面傳遞到另一個頁面,但只要把該方法的第二個參數設定成True,就可以保留第一個頁面的表單資料和查詢字串。
同時,使用Server.Transfer時應注意一點:目標頁面將使用原始頁面建立的應答流,這導致ASP.NET的機器驗證檢查(Machine Authentication Check,MAC)認為新頁面的ViewState已被篡改。因此,如果要保留原始頁面的表單資料和查詢字串集合,必須把目標頁面Page指令的EnableViewStateMac屬性設定成False。
具體的請參見:http://blog.csdn.net/aaahts/archive/2004/07/26/51786.aspx,這篇文章對這些方法作了詳細的說明.