在這篇文章中,將介紹一些提高 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 語句規則
21.緩存
緩存是一種用空間換取時間的技術,通俗點也就是說把你得到的數據存放在內存中一段時間,在這短時間內服務器不去讀取數據庫、或是真實的數據源,而是讀取你存放在內存中的數據。 緩存是網站性能優化不可缺少的一種數據處理機制,他能有效的緩解數據庫壓力。 ASP.NET 中的緩存主要分為:
22.做負載均衡和服務器加成
負載均衡不應該僅僅被看作是實現可擴展性的一種手段。盡管它肯定提高了可擴展性,很多時候它增加了 Web 應用程序的性能,因為請求和用戶都散發著多個服務器。
23.通過 FxCop 做代碼檢查和優化
FxCop 是一個代碼分析工具,它使用基於規則的引擎,來檢查出你代碼中不合規范的部分;你也可以定制自己的規則加入到這個引擎。其中的一些規則是:
24.ASP.NET 性能監控工具
這些是用於監視代碼的性能的工具。
以上是一些性能調整的提示。性能調優不是一天兩天的工作,而是一個反反復復的過程。對於網站開發人員來說,在編寫 ASP.NET 應用程序時注意性能問題,養成良好的習慣,提高應用程序性能,至少可以推遲必需的硬件升級,降低網站的成本。