提高 ASP.NET Web 應用效能的 24 種方法和技巧
在這篇文章中,將介紹一些提高 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 更多規則方法請參照:http://database.51cto.com/art/201407/445934.htm
21.快取
快取是一種用空間換取時間的技術,通俗點也就是說把你得到的資料存放在記憶體中一段時間,在這短時間內伺服器不去讀取資料庫、或是真實的資料來源,而是讀取你存放在記憶體中的資料。 快取是網站效能優化不可缺少的一種資料處理機制,他能有效的緩解資料庫壓力。 ASP.NET 中的快取主要分為:
- 頁面快取
- 資料來源快取
- 自定義資料快取
22.做負載均衡和伺服器加成
負載均衡不應該僅僅被看作是實現可擴充套件性的一種手段。儘管它肯定提高了可擴充套件性,很多時候它增加了 Web 應用程式的效能,因為請求和使用者都散發著多個伺服器。
23.通過 FxCop 做程式碼檢查和優化
FxCop 是一個程式碼分析工具,它使用基於規則的引擎,來檢查出你程式碼中不合規範的部分;你也可以定製自己的規則加入到這個引擎。其中的一些規則是:
- 避免過多的區域性變數
- 避免使用未呼叫的私有程式碼
- 避免未例項化的內部類
- 避免使用未密封的特性
- 避免進行不必要的強制轉換
- 以內聯方式初始化引用型別的靜態欄位
- 用 NeutralResourcesLanguageAttribute 標記程式集
- 將成員標記為 Static 等等。
24.ASP.NET 效能監控工具
這些是用於監視程式碼的效能的工具。
- .NET 記憶體分析器
- Red Gate ANTS 效能分析工具
- Fiddler
- 效能計數器
結論: 以上是一些效能調整的提示。效能調優不是一天兩天的工作,而是一個反反覆覆的過程。對於網站開發人員來說,在編寫 ASP.NET 應用程式時注意效能問題,養成良好的習慣,提高應用程式效能,至少可以推遲必需的硬體升級,降低網站的成本。
相關文章
- 掌握提高 Web 應用的效能的方法 之 優化 PHP 和 LaravelWeb優化PHPLaravel
- 幾種設計良好結構以提高.NET應用效能的方法
- 提高 SOLIDWORKS 大型裝配體和圖紙效能的 7 種方法Solid
- 如何提高你的 React 應用的效能React
- 【ASP.NET Core】配置應用程式地址的N多種方法ASP.NET
- 5種設定ASP.NET Core應用程式URL的方法ASP.NET
- 三種提高Python程式碼效能的簡便方法Python
- 介紹幾種提高mysql的效能和對於sql的優化的方法MySql優化
- 提高Spring Data JPA應用程式的效能Spring
- 使用 Traefik 提高 WebSocket 應用效能Web
- 提高 PostgreSQL 插入效能的 5 個技巧SQL
- IoC在ASP.NET Web API中的應用ASP.NETWebAPI
- 提高方面級情感分析的效能:一種結合詞彙圖和句法圖的方法
- 透過 CancellationToken 提高 Web 效能Web
- 提高應用程式安全性的測試和方法有哪些?
- JavaScript 中的調節器:提高應用程式的效能JavaScript
- VS2022-建立 ASP.NET Core Web 應用ASP.NETWeb
- 用Spring Web Flow和Terracotta搭建Web應用SpringWeb
- 怎麼提高網路應用效能?讓DPDK GRO和GSO來幫你!
- 讓ASP.NET Web API的Action方法ASP.NETWebAPI
- 如何能提高CSS編寫技巧 提高Web前端開發效率CSSWeb前端
- Windows Phone應用效能監控與分析技巧Windows
- web效能常見優化技巧Web優化
- 提高Web前端開發技能的優化技巧總結!Web前端優化
- 提高JS原生方法效能的JS庫 -- loadashJS
- 提高 MongoDB 運維效率的實用技巧MongoDB運維
- web前端應用應該關注哪些效能指標?Web前端指標
- 瞭解JavaScript中的Memoization以提高效能,再看React的應用JavaScriptReact
- Web 效能優化方法Web優化
- 在ASP.NET Core中用HttpClient(四)——提高效能和優化記憶體ASP.NETHTTPclient優化記憶體
- asp.net 應用程式中同步方法呼叫非同步方法無響應解決方法ASP.NET非同步
- Web 效能優化:21 種優化 CSS 和加快網站速度的方法Web優化CSS網站
- 用 zsh 提高生產力的 5 個技巧
- 提升Spring Boot應用效能的秘密武器:揭秘@Async註解的實用技巧Spring Boot
- 或許是你應該瞭解的一些 ASP.NET Core Web API 使用小技巧ASP.NETWebAPI
- ASP.NET Core 入門教程 2、使用ASP.NET Core MVC框架構建Web應用ASP.NETMVC框架架構Web
- MySQL 海量資料的 5 種分頁方法和優化技巧MySql優化
- 可以提高雲端計算效能的6種技術
- 【譯】Google - 使用 webpack 進行 web 效能優化(三):監控和分析應用GoWeb優化