在這篇文章中,將介紹一些提升 ASP.NET Web 應用性能的方法和技巧。衆所周知,解決性能問題是一項繁瑣的工做,當出現性能問題,每一個人都會歸咎於編寫代碼的開發人員。web
那性能問題到底該如何解決?如下是應用系統發佈前,做爲 .NET 開發人員須要檢查的點。數據庫
1.debug=「false」編程
當建立 ASP.NET Web應用程序,默認設置爲「true」。開發過程當中,設置爲「true」是很是有用多,但在應用程序發佈部署時,需將其設置爲「false」。c#
1
|
<compilation defaultLanguage=
"C#"
debug=
"false"
targetFramework=
"4.0"
/>
|
2.關閉 tracing(追蹤)緩存
tracing 是很是可怕的,你有沒有忘記關閉它。假如沒用,請肯定編輯 web.config 而且關閉它。它將佔用大量您的程序資源。性能優化
1
|
<trace enabled=
"false"
requestLimit=」10」 pageoutput=」
false
」 traceMode=」SortByTime」 localOnly=」
true
」>
|
3.禁用 session服務器
假如您用不到 session 會話跟蹤請務必禁用它。您能夠在每一個 asp.net 頁面中設置以下:網絡
1
2
3
|
<%@ page language=
"c#"
codebehind=
"webform1.aspx.cs"
autoeventwireup=
"false"
inherits=
"webapplication1.webform1"
enablesessionstate=
"false"
%>
|
4.使用發佈版本部署應用session
部署應用程序到生產環境時,要確保使用的發佈版本模式,而不是調試模式。若是使用調試模板極容易發生請求超時。部署成發佈版本,你將會發現速度有很大的提高。多線程
5.關閉頁面的 View State
View State 主要是在提交之後回顯用的,它只有在頁面中的數據是提交到本頁時纔有用。其默認是「true」。若是你沒有使用表單數據回傳,那麼能夠關閉 View State。
1
|
<%@ Page EnableViewState=
"false"
%>
|
6.避免使用 Response.Redirect
Redirect(重定向)很是麻煩,它僅用於用於從當前物理服務器開發跳轉到其它服務器。若是隻是在本服務器開發內頁面跳轉請使用 Server.Transfer 語法,這樣會減小不少沒有必要的客戶端重定向。
7.運用 StringBuilder 類以及使用 ToString()方法
String 類對象是不可改變的,對於 String 對象的從新賦值在本質上是從新建立了一個 String 對象並將新值賦予該對象,其方法 ToString 對性能的提升並不是很顯著。在處理字符串時,最好使用 StringBuilder 類,其 .NET 命名空間是 System.Text。該類並不是建立新的對象,而是經過 Append,Remove,Insert 等方法直接對字符串進行操做,經過 ToString 方法返回操做結果。 其定義及操做語句以下所示
1
2
3
4
|
int
num;
System.Text.StringBuilder str =
new
System.Text.StringBuilder();
//建立字符串
str.Append(num.ToString());
//添加數值num
Response.Write(str.ToString);
//顯示操做結果
|
8.避免拋出異常
異常會致使速度變慢,而且使得應用程序頁面顯示異常,使得沒法進行其餘操做。可使用 try / catch 使出現的異常記錄到日誌文件中。
9.使用 finally 方法回收資源
假如你在應用開發中大量使用其餘數據庫鏈接和訪問文件,請肯定在用完後關閉它們。finally 塊是程序中最後被執行,所以在這裏面的代碼會確保必定會被執行,關閉代碼必定要在這個開發方法塊中執行。
10.使用客戶端腳本驗證
用客戶端驗證代替服務器開發端驗證。服務器開發端數據驗證將會大量消耗您的服務器開發上的資源,而且會代來大量的頁面數據回傳。
11.使用 Page.IsPostback
請確保不執行過多的回傳代碼。使用 Page.IsPostBack 屬性,以確保只執行頁面初始化邏輯,當一個頁面第一次加載,而不向響應客戶回發。
12.使用分頁
大多數 Web 應用程序數據是以表格形式顯示。分頁有利用應用開發程序效率。每次儘可能顯示小部分數據,這樣會加快頁面顯示速度。
13.使用 Ajax 異步調用
使用 Ajax 方法,進行異步調用。
14.刪除未使用的 HttpModules
對於 httpModules,咱們能夠理解爲:創建一個通用的可用被插入任何 Web 應用程序的 HttpApplication 事件鉤子。使用 HttpModule 是可複用的,不須要特定語應用程序代碼的,只須要 web.config 中的一個條目。 在 web.config 文件中,刪除未使用的 HttpModules。
15.避免遞歸函數/嵌套循環
在任何編程語言中都需避免嵌套循環和遞歸函數,以提升性能。
16.不使用沒必要要的 Server Control
ASP.NET 中,大量的服務器端控件方便了程序開發,但也可能帶來性能的損失,由於用戶每操做一次服務器端控件,就產生一次與服務器端的往返過程。所以,非必要,應當少使用 Server Control。
17.調用多個操做時,請使用多線程
問題出現時,單線程卡在此問題上長時間運行。所以,可使用多個線程以提升應用程序的響應速度。
18.數據庫的鏈接和關閉
訪問數據庫資源須要建立鏈接、打開鏈接和關閉鏈接幾個操做。這些過程須要屢次與數據庫交換信息以經過身份驗證,比較耗費服務器資源。ASP.NET 中提供了鏈接池(Connection Pool)改善打開和關閉數據庫對性能的影響。系統將用戶的數據庫鏈接放在鏈接池中,須要時取出,關閉時收回鏈接,等待下一次的鏈接請求。鏈接池的大小是有限的,若是在鏈接池達到最大限度後仍要求建立鏈接,必然大大影響性能。所以,在創建數據庫鏈接後只有在真正須要操做時纔打開鏈接,使用完畢後立刻關閉,從而儘可能減小數據庫鏈接打開的時間,避免出現超出鏈接限制的狀況。
19.將 SqlDataReader 類用於快速只進數據遊標
SqlDataReader 類提供了一種讀取從 SQL Server 數據庫檢索的只進數據流的方法。若是當建立 ASP.NET 應用程序時出現容許您使用它的狀況,則 SqlDataReader 類提供比 DataSet 類更高的性能。狀況之因此這樣,是由於 SqlDataReader 使用 SQL Server 的本機網絡數據傳輸格式從數據庫鏈接直接讀取數據。另外,SqlDataReader 類實現 IEnumerable 接口,該接口也容許您將數據綁定到服務器控件。有關更多信息,請參見 SqlDataReader 類。有關 ASP.NET 如何訪問數據的信息,請參見經過 ASP.NET 訪問數據。
20.高性能的 SQL 語句規則
21.緩存
緩存是一種用空間換取時間的技術,通俗點也就是說把你獲得的數據存放在內存中一段時間,在這短期內服務器不去讀取數據庫、或是真實的數據源,而是讀取你存放在內存中的數據。 緩存是網站性能優化不可缺乏的一種數據處理機制,他能有效的緩解數據庫壓力。 ASP.NET 中的緩存主要分爲:
22.作負載均衡和服務器加成
負載均衡不該該僅僅被看做是實現可擴展性的一種手段。儘管它確定提升了可擴展性,不少時候它增長了 Web 應用程序的性能,由於請求和用戶都散發着多個服務器。
23.經過 FxCop 作代碼檢查和優化
FxCop 是一個代碼分析工具,它使用基於規則的引擎,來檢查出你代碼中不合規範的部分;你也能夠定製本身的規則加入到這個引擎。其中的一些規則是:
24.ASP.NET 性能監控工具
這些是用於監視代碼的性能的工具。
以上是一些性能調整的提示。性能調優不是一天兩天的工做,而是一個反反覆覆的過程。對於網站開發人員來講,在編寫 ASP.NET 應用程序時注意性能問題,養成良好的習慣,提升應用程序性能,至少能夠推遲必需的硬件升級,下降網站的成本。