ASP.NET:性能與緩存

作者: 張逸  來源: 博客園  發布時間: 2010-08-16 14:15  閱讀: 2043 次  推薦: 1   原文鏈接   [收藏]  
 
[1] ASP.NET:性能與緩存
[2] ASP.NET:性能與緩存

  在MSDN網絡課堂中下載了一些九月份的網絡講座。有很多還是很有意義的。《ASP.NET系列講座之一:性能與緩存》是由微軟開發工具專家王立楠講授。王先生的講解非常清晰,課件也很詳細,雖然是網絡講座,但Down下來的視頻文件聲音很清晰。仔細聽了一遍,把其中的某些要點記錄了下來。

  此講主要是介紹了一些tip,以提高ASP.NET的性能。以下就是講座介紹的一些技巧:

  一、避免不必要的執行操作

  Page_Load和IsPostBack

  在ASP.NET中,用戶每次點擊頁面,包括點擊頁面上的控件,都會激發Page_Load事件。例如如下代碼:

void Page_Load(Object sender, EventArgs e) {
        
// set up a connection and command here
        if (!Page.IsPostBack) {
            String query 
= "select * from Authors where FirstName like '%JUSTIN%'";
            myCommand.Fill(ds, 
"Authors");
            myDataGrid.DataBind();
        }

    }


    
void Button_Click(Object sender, EventArgs e) {
        String query 
= "select * from Authors where FirstName like '%BRAD%'";
        myCommand.Fill(ds, 
"Authors");
        myDataGrid.DataBind();
    }

  先拋開Page_Load事件中的if語句不管。在用戶點擊頁面時,會執行Page_Load中的代碼,它實現了查詢數據表并將結果放到DataGrid中的功能。同時,我們在Button的Click方法中也實現了查詢數據表并返回結果的功能,只是查詢的數據表和條件略有不同。如果沒有if語句,那么當用戶單擊Button時,它會先執行Page_Load,然后再響應Button的Click事件。顯然此時執行Page_Load是沒有必要的。為什么會這樣呢?因為HTTP協議是瞬時斷開的。只要數據傳輸完畢,HTTP協議就會斷開瀏覽器和服務器的連接。每當用戶做出新的操作時,如單擊頁面上的Button,又會重新連接頁面,此時必然會響應Page_Load事件。

  因此,我們需要在Page_Load中判斷Page.IsPostBack的屬性。該屬性指示該頁是否正為響應客戶端回發而加載,或者它是否正被首次加載和訪問。如果是首次加載,則為false;否則為true。所以這里的Page_Load代碼表達的含義是:如果頁面被首次加載,則執行if里面的代碼;否則忽略。因此,當用戶單擊Button時,由于頁面之前已經被加載,所以會跳過Page_Load里的代碼,這就大大地提升了ASP.NET的性能。

  二、關閉不必要的Session狀態

  ASP.NET使用Session來保存用戶的相關信息,這些信息是保存在服務器端的。Session主要與客戶授權相關。如果提供了Session狀態,當每次調用頁面時,都會首先查詢Session狀態,這必然影響了頁面執行的性能。因此,如果你提供的只是普通的頁面,和客戶授權無關,應該關閉Session狀態。也許有人認為頁面的Session狀態影響的性能是很微小的,幾乎可以忽略不計。然而試想你要做的項目涉及到的頁面非常之多,每次查詢Session所耗費的時間,累計起來,對性能的影響仍然是可觀的。關閉Session狀態的方法是在ASP.NET的html代碼中設置:

 
<%@ Page EnableSessionState="false" %>

  三、謹慎使用Server Control

  1、不必要時可以不使用Server Control

  在ASP.NET中提供了兩種控件:Server Control和標準的HTML控件。HTML控件只響應客戶端事件,而Server Control提供了RunAtServer屬性,它會在服務器端建立對象的映射。它的功能比HTML控件更強大,但會損耗一定的性能。因此,在設計頁面時,應根據實際的情況選擇控件。如果只需要響應客戶端事件,那么最好選擇HTML控件,這會大大提高ASP.NET的性能。

  2、不必要時可以關閉Server Control的ViewState

  ViewState與Session、Application一樣記錄的都是ASP.NET中的狀態。但ViewState作用的范圍只限于頁面。對于相同用戶相同頁面,控件的ViewState是相同的。由于控件可能會用到不同的頁面中,Server Control通過ViewState來記錄不同的數據狀態。

  但是并非所有的Server Control都需要ViewState。例如一個DataGrid控件,如果我們只是將DataSet填充到該控件中,并不對其中的數據進行操作,就不需要設置ViewState。由于ASP.NET中是將Server Control的ViewState默認設置為true,因此我們需要對控件進行重新設置:

 
<asp:datagrid EnableViewState="false“ runat="server"/>

  如果要禁止頁面所有Server Control的ViewState,則使用:

 
<%@ Page EnableViewState="false" %>

  四、不要用Exception控制程序流程

  捕獲異常對性能的損耗是眾所周知的。因此能夠避免Exception,最好不用。例如:

 
try {
result
= 100 / num;
}

catch (Exception e) {
result
= 0;
}

  上面的代碼會捕獲除數為0的異常。此時,完全可以用if語句來控制程序流程:

 
if (num != 0)
{
result
= 100 / num;
}

else
{
result
= 0;
}

  五、禁用VB和JScript動態數據類型

  在ASP.NET中,為了保持對ASP的兼容,保留了VB和JScript的動態數據類型。但在C#和VB.NET中,是不能使用動態數據類型的。由于使用動態數據類型會大量的占用運行時CPU,因此會影響到程序的性能,因此建議關閉VB和JScript動態數據類型,方法是:

 
<%@ Page Language="VB" Strict="true" %>

  六、其它提高性能的技巧

  1、使用存儲過程數據訪問
  2、只讀數據訪問不要使用DataSet,而是使用SqlDataReader代替DataSet,因為SqlDataReader是read-only, forward-only
  3、關閉ASP.NET的Debug模式

[第1頁][第2頁]
1
0
 
標簽:ASP.NET 緩存
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()