ASP.NET:效能與緩衝[轉載]

來源:互聯網
上載者:User
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,則使用:

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

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

<%@ Page EnableViewState="false" %>

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模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.