asp.net的效能最佳化

來源:互聯網
上載者:User
asp.net|效能|最佳化 效能對於一個應用程式來說是一個很重要的問題,在web的開發中也是一樣,相信沒有人願意在電腦螢幕前花8秒鐘來等待一個也面的開啟,這就是常說的在web上的8秒鐘原則。對於一個應用程式的效能我們應該把它當作是應用程式的一項功能,在設計的時候就應該處理好效能的問題,而不應該在整個程式開發完了以後再來進行最佳化,因為這樣會付出更多的代價。
下面來討論一下在asp.net中的效能問題。
    asp.net相對於以前的版本asp通過引擎的改變,從而提高了效能。Asp是一種指令碼解釋引擎,有很多的代碼是運行時接受使用者請求後編譯的,這樣在很多的使用者都發生同一請求時會造成伺服器端的壓力很重,而asp.net是採用一次編譯的策略,只有當某一個頁面第一次被請求時伺服器才通過整個的編譯過程,這樣就大大提高了運行效率。但只是靠引擎的最佳化並不能完全解決asp.net的效能問題,代碼的最佳化是另一個很重要的方面。
    用Asp.net建立web應用程式時應該使用三層結構模型,三層就夠是近幾年來比較流行的一種模型。三層結構的三層分別為展示層(使用者可以看到的頁面)、業務層(實現應用程式的業務功能,一般稱為組件,由.vb或.cs等檔案編譯而成的.dll控制項)、資料層(主要涉及到用ado.net訪問資料庫)。三層結構可以使程式具有更好的可擴充性、靈活性、安全性、平台無關性以及可維護性。
Asp.net可以使用C#或vb.net這些物件導向的進階語言來編寫邏輯代碼,我們使用這些語言定義變數時要求顯式地定義所有變數的類型,避免使用object類型的晚Binder 方法,應該早綁定,早綁定有利於代碼的執行有利於提高效能。我們可以在page指令中加上Explicit=”true”,如:<%@ Page Language=”VB” Explicit=”true”%>這樣我們每次在聲明變數時都應該指定類型。還可以在Page指令中加上Strict屬性如:<%@ Page Language=”VB” Strict=”true” %>來避免晚綁定。
    ViewState是asp.net的新功能。使用ViewState可以很容易地在往返伺服器的過程中保持控制項狀態。但使用ViewState會使檔案的大小明顯增大而且還會影響效能。所以建議如果不是萬不得已就應該關閉ViewState如:<%@ Page EnableViewState=”false” %> 或者是單獨停掉某一個控制項的ViewState。除此之外,對於Session我們還應該選擇合適的方式存放,有三種方式:Inproc(在進程中存放)、StateServer(放在狀態伺服器)、database(在資料庫中存放)。在Inproc中效能最好,但擴充性相對來說較差,其它的兩種方式效能沒Inproc好,但具有良好的擴充性,所以我們應該根據具體的情況來作選擇。如果不需要使用Sesion也應該禁用如:<%@ Page EnableSession=”false” %> 這樣有助於也面的請求。如果只是讀取Session不做修改可以這樣做:<%@ Page EnableSession=”ReadOnly” %> 也可以提高效能。
    還有一個很重要的提高效能的方法就是使用緩衝技術,asp.net中有三種緩衝機制頁面緩衝、片段快取和資料緩衝。頁面緩衝是將頻繁訪問的頁面放入緩衝,當使用者再次請求該頁面時就不需要重建頁面而是直接將緩衝中的頁面發送到用戶端,節省了回應時間,極大提高了效能。具體做法是在頁面代碼中加上OutputCache指令,如:<%@ OutputCache Duration=”60” VaryByParam=”none” %> 在上面的代碼中Duration是指緩衝的時間,根據程式的實際情況自行設定,VaryByparam是指緩衝的內容根據一個參數來發生變化。比方說已個頁面上有一個查詢天氣的功能,當一個使用者輸入北京查詢了後,頁面被緩衝了,另一個使用者馬上查詢上海的天氣,為了產生輸出的結果還是被緩衝的北京這樣的錯誤,VaryByparam就起到作用了,<%@ OutputCache Duration=”60” VaryByParam=”TextBox1” %> 其中TextBox1是指輸入地址的文字框的ID號。片段頁面緩衝主要是用於緩衝使用者控制項中的內容,在使用者控制項的頁面代碼中添加OutputCache指令,然後在頁面中加入使用者控制項就可以了。有些時候,使用者會請求大量相同的資料,如果頻繁地讀取這些資料就會浪費很多的時間,這時就可以應用資料緩衝技術來提高效能。可以通過編程的方式來緩衝任何對象。在asp.net中是通過Cachel類來實現的。如:Cache[“myName”]=myName;  myName=Cache[“myName”];。
    做web開發離不開資料庫,在操作資料庫的時候應盡量使用預存程序,這樣可以消除資料庫的往返訪問。在使用DataSet和DataReader時也要注意,如果從資料庫中查詢出的資料只是在最上層顯示而不需要修改就應該使用DataReader,因為DataReader的效能比DataSet好。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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