日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

标题:ASP.NET几种进行性能优化的方法及注意问题

發(fā)布時(shí)間:2025/3/17 asp.net 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 标题:ASP.NET几种进行性能优化的方法及注意问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正文:
  網(wǎng)站的性能對(duì)于ASP.NET程序開(kāi)發(fā)人員來(lái)說(shuō)非常重要。一個(gè)優(yōu)秀的網(wǎng)站雖然有美觀的頁(yè)面設(shè)計(jì),完善的服務(wù)功能,但是打開(kāi)網(wǎng)頁(yè)時(shí)有長(zhǎng)時(shí)間的延遲,用戶最終將會(huì)無(wú)法忍受。尤其對(duì)于大型的電子商務(wù)網(wǎng)站而言,每秒鐘有數(shù)萬(wàn)用戶同時(shí)訪問(wèn),沒(méi)有良好的網(wǎng)站性能,根本無(wú)法滿足龐大的需求。

  ASP.NET作為全新一代的動(dòng)態(tài)網(wǎng)頁(yè)生成系統(tǒng),它在平臺(tái)性能方面與原有的ASP相比已有了一個(gè)本質(zhì)的提高。但要在此基礎(chǔ)上開(kāi)發(fā)出專業(yè)水準(zhǔn)的、符合生產(chǎn)標(biāo)準(zhǔn)的、受用戶歡迎的web應(yīng)用程序,還需要開(kāi)發(fā)人員從編程的角度在頁(yè)面、數(shù)據(jù)訪問(wèn)和字符串處理等各方面進(jìn)行優(yōu)化處理,以提高網(wǎng)站的總體性能。

  本文將主要探討在ASP.NET中與此相關(guān)的幾種進(jìn)行性能優(yōu)化的方法及注意問(wèn)題。

  頁(yè)面性能優(yōu)化

  1、會(huì)話狀態(tài)的恰當(dāng)選擇

  HTTP協(xié)議是一種無(wú)狀態(tài)的通信協(xié)議,無(wú)法記錄和識(shí)別來(lái)自不同客戶端的請(qǐng)求,但在實(shí)際應(yīng)用中系統(tǒng)卻要維護(hù)來(lái)自客戶端的不同請(qǐng)求之間的會(huì)話狀態(tài)信息。ASP.NET通過(guò)將會(huì)話狀態(tài)信息存儲(chǔ)在進(jìn)程、狀態(tài)服務(wù)器或SQL Server數(shù)據(jù)庫(kù)中來(lái)解決這個(gè)問(wèn)題。

  將會(huì)話狀態(tài)信息保存在WEB服務(wù)器的內(nèi)存中具有最佳的性能,速度很快,但是卻缺乏會(huì)話狀態(tài)信息跨越多個(gè)服務(wù)器的能力。若要在多個(gè)WEB服務(wù)器之間維護(hù)會(huì)話信息,可以使用狀態(tài)服務(wù)器進(jìn)行存儲(chǔ),這種方式由于可以將應(yīng)用程序部署到多臺(tái)服務(wù)器上而提高了系統(tǒng)的伸縮性和可靠性,但是以降低性能為代價(jià)。對(duì)于極其重要的會(huì)話信息,需要使用SQL Server存儲(chǔ)方式,從而避免丟失重要的會(huì)話信息,但由此產(chǎn)生的工作負(fù)載比前兩者大得多。

  若不考慮狀態(tài)信息的保留和多個(gè)服務(wù)器共享,應(yīng)盡量選擇保存在服務(wù)器的進(jìn)程中,從而得到最佳的性能。

  會(huì)話狀態(tài)信息的存儲(chǔ)方式選擇通過(guò)web.config文件:

  <sessionState
  mode="InProc/StateServer/SqlServer" //存儲(chǔ)方式由此行選擇
  stateConnectionString="tcpip=127.0.0.1:42424"
  ……
  timeout="20"/>

  2、服務(wù)器控件的優(yōu)化選擇

  2.1 減少不必要的服務(wù)器控件

  服務(wù)器控件帶來(lái)的方便和功能是html控件所不能比擬的。但是每一個(gè)服務(wù)器控件都需要在服務(wù)器端創(chuàng)建相應(yīng)的對(duì)象,是以犧牲服務(wù)器端的資源為代價(jià)的,過(guò)多的使用服務(wù)器控件會(huì)極大的影響程序性能。

  很多情況下,簡(jiǎn)單地使用html標(biāo)記或數(shù)據(jù)綁定即能夠?qū)崿F(xiàn)所需功能。比如<asp:Label>控件,若使用它來(lái)顯示靜態(tài)信息,則完全可用簡(jiǎn)單的標(biāo)記來(lái)實(shí)現(xiàn)。如果html控件達(dá)不到所要實(shí)現(xiàn)的功能,而且在腳本語(yǔ)言如javascript、vbscript也不能實(shí)現(xiàn)的情況下,才考慮選擇服務(wù)器控件。

  2.2 禁用不必要的狀態(tài)視圖

  服務(wù)器控件的狀態(tài)視圖屬性能夠自動(dòng)的在頁(yè)面往返過(guò)程中維護(hù)服務(wù)器控件的狀態(tài),減少開(kāi)發(fā)者的工作量,但是需要占用大量的服務(wù)器內(nèi)存資源。因此,在不需要服務(wù)器控件狀態(tài)視圖的情況下,應(yīng)將其EnableViewState屬性設(shè)置為false,如常用的<asp:Lable>和<asp:Button>控件。

  2.3 Page.IsPostBack的運(yùn)用

  Page.IsPostBack用于記錄頁(yè)面是否從客戶端返回,若為false表示初次運(yùn)行,否則表示從客戶端再次返回該頁(yè)面。Page.IsPostBack的合理應(yīng)用可以避免頁(yè)面在往返過(guò)程中的一些不必要的操作。在Page_Load函數(shù)及一些只需要初始化一次的事件函數(shù)中均可以使用該屬性來(lái)提高應(yīng)用程序性能。

  void Page_Load(Object o, EventArgs e)
  {
  if(! Page.IsPostBack)
  {
  conn=new SqlConnection("server=localhost;uid=sa;pwd=;database=data");
  String sql="select * from student";
  cmd.Fill(ds,"stu");
  mydataGrid.DataBind();
  }
  }

  以上代碼將保證只有在首次訪問(wèn)該頁(yè)面時(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀取并綁定。

  2.4 合理使用DataGrid控件

  DataGrid控件帶有最強(qiáng)大的數(shù)據(jù)顯示功能,還內(nèi)置了對(duì)數(shù)據(jù)的修改、刪除、添加、分頁(yè)等很多功能。如果只需簡(jiǎn)單的顯示數(shù)據(jù), DataGrid并非最佳選擇。DataGrid控件的分頁(yè)功能,數(shù)據(jù)的存儲(chǔ)方式(存儲(chǔ)在viewstate中)等,雖然讓程序開(kāi)發(fā)者使用方便快捷,但由此產(chǎn)生的性能開(kāi)銷不容小視。

  DataList控件比DataGrid功能少了很多。但自定義性強(qiáng)了很多。特有的多行數(shù)據(jù)顯示還是比較方便的。DataGrid能實(shí)現(xiàn)的功能,它基本能實(shí)現(xiàn)。

  Repeater控件功能最少,但自定義性非常強(qiáng)。由于減少了很多功能,對(duì)服務(wù)器的性能帶來(lái)消耗最小。

  因此,在只需簡(jiǎn)單顯示數(shù)據(jù)列表時(shí),選擇Repeater或DataList控件同樣可以達(dá)到目的,而且減輕了性能上的開(kāi)銷。

  數(shù)據(jù)庫(kù)訪問(wèn)性能優(yōu)化

  1、數(shù)據(jù)庫(kù)的連接和關(guān)閉

  訪問(wèn)數(shù)據(jù)庫(kù)資源需要?jiǎng)?chuàng)建連接、打開(kāi)連接和關(guān)閉連接幾個(gè)操作。這些過(guò)程需要多次與數(shù)據(jù)庫(kù)交換信息以通過(guò)身份驗(yàn)證,比較耗費(fèi)服務(wù)器資源。ASP.NET中提供了連接池(Connection Pool)改善打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)對(duì)性能的影響。系統(tǒng)將用戶的數(shù)據(jù)庫(kù)連接放在連接池中,需要時(shí)取出,關(guān)閉時(shí)收回連接,等待下一次的連接請(qǐng)求。

  連接池的大小是有限的,如果在連接池達(dá)到最大限度后仍要求創(chuàng)建連接,必然大大影響性能。因此,在建立數(shù)據(jù)庫(kù)連接后只有在真正需要操作時(shí)才打開(kāi)連接,使用完畢后馬上關(guān)閉,從而盡量減少數(shù)據(jù)庫(kù)連接打開(kāi)的時(shí)間,避免出現(xiàn)超出連接限制的情況。

  2、使用存儲(chǔ)過(guò)程

  存儲(chǔ)過(guò)程是存儲(chǔ)在服務(wù)器上的一組預(yù)編譯的SQL語(yǔ)句,類似于DOS系統(tǒng)中的批處理文件。存儲(chǔ)過(guò)程具有對(duì)數(shù)據(jù)庫(kù)立即訪問(wèn)的功能,信息處理極為迅速。使用存儲(chǔ)過(guò)程可以避免對(duì)命令的多次編譯,在執(zhí)行一次后其執(zhí)行規(guī)劃就駐留在高速緩存中,以后需要時(shí)只需直接調(diào)用緩存中的二進(jìn)制代碼即可。

  另外,存儲(chǔ)過(guò)程在服務(wù)器端運(yùn)行,獨(dú)立于ASP.NET程序,便于修改,最重要的是它可以減少數(shù)據(jù)庫(kù)操作語(yǔ)句在網(wǎng)絡(luò)中的傳輸。

  3、優(yōu)化查詢語(yǔ)句

  ASP.NET中ADO連接消耗的資源相當(dāng)大,SQL語(yǔ)句運(yùn)行的時(shí)間越長(zhǎng),占用系統(tǒng)資源的時(shí)間也越長(zhǎng)。因此,盡量使用優(yōu)化過(guò)的SQL語(yǔ)句以減少執(zhí)行時(shí)間。比如,不在查詢語(yǔ)句中包含子查詢語(yǔ)句,充分利用索引等。

  字符串操作性能優(yōu)化

  1、使用值類型的ToString方法

  在連接字符串時(shí),經(jīng)常使用"+"號(hào)直接將數(shù)字添加到字符串中。這種方法雖然簡(jiǎn)單,也可以得到正確結(jié)果,但是由于涉及到不同的數(shù)據(jù)類型,數(shù)字需要通過(guò)裝箱操作轉(zhuǎn)化為引用類型才可以添加到字符串中。但是裝箱操作對(duì)性能影響較大,因?yàn)樵谶M(jìn)行這類處理時(shí),將在托管堆中分配一個(gè)新的對(duì)象,原有的值復(fù)制到新創(chuàng)建的對(duì)象中。

  使用值類型的ToString方法可以避免裝箱操作,從而提高應(yīng)用程序性能。

  2、運(yùn)用StringBuilder類

  String類對(duì)象是不可改變的,對(duì)于String對(duì)象的重新賦值在本質(zhì)上是重新創(chuàng)建了一個(gè)String對(duì)象并將新值賦予該對(duì)象,其方法ToString對(duì)性能的提高并非很顯著。

  在處理字符串時(shí),最好使用StringBuilder類,其.NET 命名空間是System.Text。該類并非創(chuàng)建新的對(duì)象,而是通過(guò)Append,Remove,Insert等方法直接對(duì)字符串進(jìn)行操作,通過(guò)ToString方法返回操作結(jié)果。

  其定義及操作語(yǔ)句如下所示:

  int num;
  System.Text.StringBuilder str=new System.Text.StringBuilder(); //創(chuàng)建字符串
  str.Append(num.ToString()); //添加數(shù)值num
  Response.Write(str.ToString); //顯示操作結(jié)果

  ASP.NET應(yīng)用程序性能測(cè)試

  在對(duì)ASP.NET應(yīng)用程序進(jìn)行性能測(cè)試之前,應(yīng)確保應(yīng)用程序沒(méi)有錯(cuò)誤,而且功能正確。具體的性能測(cè)試可以采用以下工具進(jìn)行:
  Web Application Strees Tool (WAS)是Microsoft發(fā)布的一個(gè)免費(fèi)測(cè)試工具,可以從http://webtool.rte.microsoft.com/上下載。它可以模擬成百上千個(gè)用戶同時(shí)對(duì)web應(yīng)用程序進(jìn)行訪問(wèn)請(qǐng)求,在服務(wù)器上形成流量負(fù)載,從而達(dá)到測(cè)試的目的,可以生成平均TTFB、平均TTLB等性能匯總報(bào)告。

  Application Center Test (ACT) 是一個(gè)測(cè)試工具,附帶于Visual Studio.NET的企業(yè)版中,是Microsoft正式支持的web應(yīng)用程序測(cè)試工具。它能夠直觀地生成圖表結(jié)果,功能比WAS多,但不具備多個(gè)客戶機(jī)同時(shí)測(cè)試的能力。

  服務(wù)器操作系統(tǒng)"管理工具"中的"性能"計(jì)數(shù)器,可以對(duì)服務(wù)器進(jìn)行監(jiān)測(cè)以了解應(yīng)用程序性能。

  結(jié)論

  對(duì)于網(wǎng)站開(kāi)發(fā)人員來(lái)說(shuō),在編寫ASP.NET應(yīng)用程序時(shí)注意性能問(wèn)題,養(yǎng)成良好的習(xí)慣,提高應(yīng)用程序性能,至少可以推遲必需的硬件升級(jí),降低網(wǎng)站的成本。

轉(zhuǎn)載于:https://www.cnblogs.com/woshare/archive/2012/11/25/2787734.html

總結(jié)

以上是生活随笔為你收集整理的标题:ASP.NET几种进行性能优化的方法及注意问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。