提高 asp.net Web 應用程式效能的方法和技巧

來源:互聯網
上載者:User
在這篇文章中,將介紹一些提高 ASP.NET Web 應用程式效能的方法和技巧。眾所周知,解決效能問題是一項繁瑣的工作,當出現效能問題,每個人都會歸咎於編寫代碼的開發人員。

  以下為譯文

那效能問題到底該如何解決?以下是應用系統發布前,作為 .NET 開發人員需要檢查的點。

  1.debug=「false」

  當建立 ASP.NET Web應用程式,預設設定為「true」。開發過程中,設定為「true」是非常有用多,但在應用程式發布部署時,需將其設定為「false」。

<compilation defaultLanguage="C#" debug="false" targetFramework="4.0" />

  2.關閉 tracing(追蹤)

  tracing 是非常可怕的,你有沒有忘記關閉它。假如沒用,請確定編輯 web.config 並且關閉它。它將佔用大量您的程式資源。

<trace enabled="false" requestLimit=”10” pageoutput=”false” traceMode=”SortByTime” localOnly=”true”>

  3.禁用 session

  假如您用不到 session 會話跟蹤請務必禁用它。您可以在每個 asp.net 頁面中設定如下:

<%@ page language="c#" codebehind="webform1.aspx.cs" autoeventwireup="false" inherits="webapplication1.webform1"enablesessionstate="false" %>

4.使用發布版本部署應用

  部署應用程式到生產環境時,要確保使用的發布版本模式,而不是偵錯模式。如果使用調試模板極容易發生請求逾時。部署成發布版本,你將會發現速度有很大的提升。

  5.關閉頁面的 View State

  View State 主要是在提交以後回顯用的,它只有在頁面中的資料是提交到本頁時才有用。其預設是「true」。如果你沒有使用表單資料回傳,那麼可以關閉 View State。

<%@ Page EnableViewState="false" %>

6.避免使用 Response.Redirect

  Redirect(重新導向)非常麻煩,它僅用於用於從當前物理伺服器開發跳轉到其它伺服器。如果只是在本伺服器開發內頁面跳轉請使用 Server.Transfer 文法,這樣會減少很多沒有必要的用戶端重新導向。

  7.運用 StringBuilder 類以及使用 ToString()方法

  String 類對象是不可改變的,對於 String 對象的重新賦值在本質上是重新建立了一個 String 對象並將新值賦予該對象,其方法 ToString 對效能的提高並非很顯著。在處理字串時,最好使用 StringBuilder 類,其 .NET 命名空間是 System.Text。該類並非建立新的對象,而是通過 Append,Remove,Insert 等方法直接對字串進行操作,通過 ToString 方法返回操作結果。 其定義及動作陳述式如下所示

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 語句,如果只更改1、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 應用程式時注意效能問題,養成良好的習慣,提高應用程式效能,至少可以延遲必需的硬體升級,降低網站的成本。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.