(轉載)提升ASP.NET Web應用性能的技巧

在這篇文章中,將介紹一些提升 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 語句規則

  • 儘可能避免全表掃描
  • 儘可能避免在 where 子句中對字段進行 null 值判斷
  • 儘可能避免在 where 子句中使用 != 或 <> 操做符
  • 儘可能避免在 where 子句中使用 or 來鏈接條件
  • in 和 not in 也要慎用
  • 不要在 where 子句中的「=」左邊進行函數、算術運算或其餘表達式運算
  • Update 語句,若是隻更改一、2個字段,不要Update所有字段
  • 對於多張大數據量(這裏幾百條就算大了)的表JOIN,要先分頁再JOIN,不然邏輯讀會很高,性能不好
  • 儘量的使用 varchar/nvarchar 代替 char/nchar 

21.緩存

緩存是一種用空間換取時間的技術,通俗點也就是說把你獲得的數據存放在內存中一段時間,在這短期內服務器不去讀取數據庫、或是真實的數據源,而是讀取你存放在內存中的數據。 緩存是網站性能優化不可缺乏的一種數據處理機制,他能有效的緩解數據庫壓力。 ASP.NET 中的緩存主要分爲:

  • 頁面緩存
  • 數據源緩存
  • 自定義數據緩存

22.作負載均衡和服務器加成

負載均衡不該該僅僅被看做是實現可擴展性的一種手段。儘管它確定提升了可擴展性,不少時候它增長了 Web 應用程序的性能,由於請求和用戶都散發着多個服務器。

23.經過 FxCop 作代碼檢查和優化

FxCop 是一個代碼分析工具,它使用基於規則的引擎,來檢查出你代碼中不合規範的部分;你也能夠定製本身的規則加入到這個引擎。其中的一些規則是:

  • 避免過多的局部變量
  • 避免使用未調用的私有代碼
  • 避免未實例化的內部類
  • 避免使用未密封的特性
  • 避免進行沒必要要的強制轉換
  • 之內聯方式初始化引用類型的靜態字段
  • 用 NeutralResourcesLanguageAttribute 標記程序集
  • 將成員標記爲 Static 等等。

24.ASP.NET 性能監控工具

這些是用於監視代碼的性能的工具。

  • .NET 內存分析器
  • Red Gate ANTS 性能分析工具
  • Fiddler
  • 性能計數器

以上是一些性能調整的提示。性能調優不是一天兩天的工做,而是一個反反覆覆的過程。對於網站開發人員來講,在編寫 ASP.NET 應用程序時注意性能問題,養成良好的習慣,提升應用程序性能,至少能夠推遲必需的硬件升級,下降網站的成本。

相關文章
相關標籤/搜索