<轉載>提高 ASP.NET Web 應用性能的 24 種方法和技巧

来源:http://www.cnblogs.com/chengxl/archive/2016/02/17/5195280.html
-Advertisement-
Play Games

在這篇文章中,將介紹一些提高 ASP.NET Web 應用性能的方法和技巧。眾所周知,解決性能問題是一項繁瑣的工作,當出現性能問題,每個人都會歸咎於編寫代碼的開發人員。 以下為譯文 那性能問題到底該如何解決?以下是應用系統發佈前,作為 .NET 開發人員需要檢查的點。 1.debug=「false」


在這篇文章中,將介紹一些提高 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
  • 性能計數器

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 登錄界面存在跨域,需手動進入。。。 求指點。。。。。 註意:啟動時QQ號要填別人的。(留言程式只支持給別人留言) 源碼路徑: https://github.com/gaoconggit/QQ-
  • 之前無意中看到Ovilia用threejs做了個LOW POLY,也就是圖片平面三角化的效果,覺得很驚艷,然後就自己花了點時間嘗試了一下。 我是沒怎麼用過threejs,所以就直接用canvas的2d繪圖API來做,因為感覺似乎這效果也用不上threejs。 直接上demo先:http://whxa...
  • 剛剛通過Live發佈博客,來測試下。
  • 1
  • 效果如下: public void plAddSY(object sender, EventArgs e) { //C#遍歷指定文件夾中的所有文件 DirectoryInfo TheFolder = new DirectoryInfo(Request.PhysicalApplicationPath
  • 經常分不清楚目錄路徑的問題,今天自己總結一下: ~/表示文件所在的根目錄。 ../表示文件所在的上級目錄。 在Server.Mappath()方法中,測試的結果是:~/ ../ / ./ 都表示文件所在的路徑。 / 和 \ 使用的方面: /用於網站網址路徑中。而且表示./ ../ ~/ 都有 /符號
  • 最近在做的一個項目其中的一部分是與遠程伺服器進行交互,確定身份驗證的合法性,於是編寫了SendRequest方法 此方法發送給遠程伺服器XML請求,伺服器經過處理後,返回XML回應,由此方法接收到後進行返回。 1 protected string SendRequest(string strXML)
  • 一、創建拖動組件 0.Draggable組件不依賴於其他組件 1.使用標簽創建 拖動組件 2.使用js創建 拖動組件 二、屬性 1.revert:如果設置為true,在拖動停止時元素將返回起始位置 2.cursor:拖動時的CSS指針樣式 $(function () { $("#box").drag...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...