777精品久无码人妻蜜桃-欧美在线观看视频一区-99精品网-伊人网中文字幕-99福利网-国产精品99久久久久久武松影视-日本黄色片免费看-免费观看高清在线观看-人妻少妇被粗大爽9797pw-日韩国产在线播放-国产日产成人免费视频在线观看-一区二区人妻-午夜看毛片-国产精品s-午夜免费av-国产精品色情国产三级在-国产精品资源在线

關(guān)于ASP.NET的性能優(yōu)化的探討

來源:期刊VIP網(wǎng)所屬分類:軟件開發(fā)時(shí)間:瀏覽:次

  摘要:隨著Internet的普及,越來越多的企業(yè)建立了自己的WWW網(wǎng)站,企業(yè)通過網(wǎng)站可以展示產(chǎn)品,發(fā)布最新動(dòng)態(tài),與用戶進(jìn)行交流和溝通,與合作伙伴建立聯(lián)系,以及開展電子商務(wù)等。網(wǎng)站建設(shè)在采用了ASP.NET技術(shù)的系統(tǒng)性能上有了很大的改善。

  關(guān)鍵字:ASP.NET、性能 開發(fā) 優(yōu)化

  Abstract: With the popularity of the Internet, more and more enterprises to establish their own WWW site, the enterprises through the website can show the product, the latest developments, exchange and communication with the user, to establish contact with partners, as well as e-commerce. Site construction has been greatly improved system performance using ASP.NET technology.

  Key words: ASP. NET, and performance; development; optimization

  中圖分類號(hào):G250.72 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-2104(2012)

  隨著Internet的普及,越來越多的企業(yè)建立了自己的WWW網(wǎng)站,企業(yè)通過網(wǎng)站可以展示產(chǎn)品,發(fā)布最新動(dòng)態(tài),與用戶進(jìn)行交流和溝通,與合作伙伴建立聯(lián)系,以及開展電子商務(wù)等。

  一、ASP.NET技術(shù)的系統(tǒng)性能的優(yōu)勢(shì)

  傳統(tǒng)的網(wǎng)站管理方式有兩種,一是靜態(tài)HTML頁面,更新信息時(shí)需要重新制作頁面然后上傳頁面并修改相應(yīng)鏈接,這種方式因?yàn)樾侍鸵巡欢嘤谩6腔贏SP和腳本語言,將動(dòng)態(tài)網(wǎng)頁和數(shù)據(jù)庫結(jié)合,通過應(yīng)用程序來處理進(jìn)行網(wǎng)站管理,這是目前較為流行的做法。但是由于ASP本身的局限性使得系統(tǒng)有一些不可克服的缺陷,而采取了ASP.NET技術(shù)的系統(tǒng)性能上有了很大的改善,其主要表現(xiàn)在以下幾方面:

  1、由于ASP頁面每次打開都必須經(jīng)過先編譯后解釋的過程,所以頁面在反復(fù)打開時(shí)速度沒有任何提升,而ASP.NET頁面只需要一次編譯后不需要重新編譯,直到該頁面被修改或Web應(yīng)用程序重新啟動(dòng)。這使得在多次訪問時(shí)速度有了極大的提升。

  2、由于ASP沒有提供任何輸出數(shù)據(jù)為內(nèi)容的元件,所以在使用ASP撰寫數(shù)據(jù)庫頁面時(shí)只能借助ADO的RecordSet對(duì)象逐筆讀取記錄,而ASP.NET通過ADO.NET提供的DataGrid等數(shù)據(jù)庫元件可以直接和數(shù)據(jù)庫聯(lián)系。

  3.ASP.NET支持應(yīng)用程序的實(shí)時(shí)更新。管理員不必關(guān)掉網(wǎng)絡(luò)服務(wù)器或者甚至不用停止應(yīng)用程序的運(yùn)行就可以更新應(yīng)用文件。應(yīng)用程序文件永遠(yuǎn)不會(huì)被加鎖,因此甚至在程序運(yùn)行時(shí)文件就可以被覆蓋。當(dāng)文件更新后,系統(tǒng)會(huì)溫和地轉(zhuǎn)換到新的版本。

  4.ASP.NET采取"code-behind"方式編寫代碼使得代碼更易于編寫,結(jié)構(gòu)更清晰,降低了系統(tǒng)的開發(fā)與維護(hù)的復(fù)雜度和費(fèi)用。

  但是我們用ASP.NET開發(fā)網(wǎng)站,無論我們寫的ASP.NET應(yīng)用程序有多么好,無論在Web站點(diǎn)中添加了多少很酷的新特性,如果我們的站點(diǎn)在處理用戶請(qǐng)求時(shí)哪怕只是讓用戶等待了幾秒鐘,用戶也不會(huì)對(duì)我們的站點(diǎn)留下好印象。事實(shí)上,如果用戶等得太久,他們就會(huì)放棄而去訪問另一個(gè)站點(diǎn)。那么,如何才能提高站點(diǎn)的響應(yīng)速度,這就要考慮到我們?cè)陂_發(fā)過程中如何優(yōu)化ASP.NET的性能。這就是我們所說ASP.NET的性能開發(fā)及其優(yōu)化。

  二、ASP.NET的性能開發(fā)和優(yōu)化

  (一)利用JIT編譯器提高程序執(zhí)行速度

  高性能代碼旨在能少做工作就少做工作,這是不言而明的。

  在編譯任何ASP.NET的應(yīng)用程序時(shí),編譯器把源代碼轉(zhuǎn)換為Microsoft中間語言(MSIL)。要在一個(gè)具體環(huán)境中執(zhí)行應(yīng)用程序,一個(gè)JIT編譯器先接受MSIL輸出并把指令轉(zhuǎn)換為主機(jī)處理的本機(jī)指令,再以即時(shí)方式編譯代碼,以便應(yīng)用程序開始執(zhí)行。但是,JIT編譯器不是把程序集中所有的MSIL都在開始執(zhí)行前轉(zhuǎn)換為本機(jī)代碼,只是一次編譯一個(gè)方法。JIT編譯器采用的這種方法有兩個(gè)性能上的優(yōu)勢(shì)。第一個(gè)優(yōu)勢(shì):這項(xiàng)技術(shù)把編譯的成本分?jǐn)傇谝粋€(gè)較長(zhǎng)的時(shí)間內(nèi),由于執(zhí)行會(huì)比JIT編譯器把所有的MSIL都進(jìn)行編譯看起來要快,這樣感覺到應(yīng)用程序的性能提高了。如果把長(zhǎng)時(shí)間的暫?;虻却龝r(shí)間分成小塊,把它們分散開,你的用戶就不會(huì)注意到它們,用戶對(duì)你的應(yīng)用程序的性能也會(huì)比較滿意。第二個(gè)優(yōu)勢(shì):JIT編譯器不編譯在執(zhí)行期間用不到的方法。因此不會(huì)做沒有必要的工作,無論什么時(shí)候省去不必要的處理工作,你就會(huì)發(fā)現(xiàn)可以獲得真正的性能增益。

  (二)數(shù)據(jù)庫訪問性能優(yōu)化

  1、使用存儲(chǔ)過程

  存儲(chǔ)過程是存儲(chǔ)在服務(wù)器上的一組預(yù)編譯的SQL語句,類似于DOS系統(tǒng)中的批處理文件。存儲(chǔ)過程具有對(duì)數(shù)據(jù)庫立即訪問的功能,信息處理極為迅速。使用存儲(chǔ)過程可以避免對(duì)命令的多次編譯,在執(zhí)行一次后其執(zhí)行規(guī)劃就駐留在高速緩存中,以后需要時(shí)只需直接調(diào)用緩存中的二進(jìn)制代碼即可。另外,存儲(chǔ)過程在服務(wù)器端運(yùn)行,獨(dú)立于ASP.NET程序,便于修改,最重要的是它可以減少數(shù)據(jù)庫操作語句在網(wǎng)絡(luò)中的傳輸。

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

  ASP.NET中ADO連接消耗的資源相當(dāng)大,SQL語句運(yùn)行的時(shí)間越長(zhǎng),占用系統(tǒng)資源的時(shí)間也越長(zhǎng)。因此,盡量使用優(yōu)化過的SQL語句以減少執(zhí)行時(shí)間。

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

  1、使用值類型的ToString方法

  在連接字符串時(shí),經(jīng)常使用"+"號(hào)直接將數(shù)字添加到字符串中。這種方法雖然簡(jiǎn)單,也可以得到正確結(jié)果,但是由于涉及到不同的數(shù)據(jù)類型,數(shù)字需要通過裝箱操作轉(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ì)象,而是通過Append,Remove,Insert等方法直接對(duì)字符串進(jìn)行操作,通過ToString方法返回操作結(jié)果。

  (四)優(yōu)化 Web 服務(wù)器計(jì)算機(jī)和特定應(yīng)用程序的配置文件以符合您的特定需要

  默認(rèn)情況下,ASP.NET 配置被設(shè)置成啟用最廣泛的功能并盡量適應(yīng)最常見的方案。因此,應(yīng)用程序開發(fā)人員可以根據(jù)應(yīng)用程序所使用的功能,優(yōu)化和更改其中的某些配置,以提高應(yīng)用程序的性能。

  1、僅對(duì)需要的應(yīng)用程序啟用身份驗(yàn)證。

  默認(rèn)情況下,身份驗(yàn)證模式為 Windows,或集成 NTLM。大多數(shù)情況下,對(duì)于需要身份驗(yàn)證的應(yīng)用程序,最好在 Machine.config 文件中禁用身份驗(yàn)證,并在 Web.config 文件中啟用身份驗(yàn)證。根據(jù)適當(dāng)?shù)恼?qǐng)求和響應(yīng)編碼設(shè)置來配置應(yīng)用程序。ASP.NET 默認(rèn)編碼格式為 UTF-8。如果您的應(yīng)用程序?yàn)閲?yán)格的 ASCII,請(qǐng)配置應(yīng)用程序使用 ASCII 以獲得稍許的性能提高。

  2、考慮對(duì)應(yīng)用程序禁用 AutoEventWireup。

  在 Machine.config 文件中將 AutoEventWireup 屬性設(shè)置為 false,意味著頁面不將方法名與事件進(jìn)行匹配和將兩者掛鉤(例如 Page_Load)。如果頁面開發(fā)人員要使用這些事件,需要在基類中重寫這些方法(例如,需要為頁面加載事件重寫 Page.OnLoad,而不是使用 Page_Load 方法)。如果禁用 AutoEventWireup,頁面將通過將事件連接留給頁面作者而不是自動(dòng)執(zhí)行它,獲得稍許的性能提升。

  3、從請(qǐng)求處理管線中移除不用的模塊。

  默認(rèn)情況下,服務(wù)器計(jì)算機(jī)的 Machine.config 文件中 節(jié)點(diǎn)的所有功能均保留為激活。根據(jù)應(yīng)用程序所使用的功能,您可以從請(qǐng)求管線中移除不用的模塊以獲得稍許的性能提升。檢查每個(gè)模塊及其功能,并按您的需要自定義它。例如,如果您在應(yīng)用程序中不使用會(huì)話狀態(tài)和輸出緩存,則可以從 列表中移除它們,以便請(qǐng)求在不執(zhí)行其他有意義的處理時(shí),不必執(zhí)行每個(gè)模塊的進(jìn)入和離開代碼。

  (五)只要可能,就緩存數(shù)據(jù)和頁輸出

  ASP.NET 提供了一些簡(jiǎn)單的機(jī)制,它們會(huì)在不需要為每個(gè)頁請(qǐng)求動(dòng)態(tài)計(jì)算頁輸出或數(shù)據(jù)時(shí)緩存這些頁輸出或數(shù)據(jù)。另外,通過設(shè)計(jì)要進(jìn)行緩存的頁和數(shù)據(jù)請(qǐng)求(特別是在站點(diǎn)中預(yù)期將有較大通訊量的區(qū)域),可以優(yōu)化這些頁的性能。與 .NET Framework 的任何 Web 窗體功能相比,適當(dāng)?shù)厥褂镁彺婵梢愿玫奶岣哒军c(diǎn)的性能,有時(shí)這種提高是超數(shù)量級(jí)的。使用 ASP.NET 緩存機(jī)制有兩點(diǎn)需要注意。

  1、不要緩存太多項(xiàng)。緩存每個(gè)項(xiàng)均有開銷,特別是在內(nèi)存使用方面。不要緩存容易重新計(jì)算和很少使用的項(xiàng)。

  2、給緩存的項(xiàng)分配的有效期不要太短。很快到期的項(xiàng)會(huì)導(dǎo)致緩存中不必要的周轉(zhuǎn),并且經(jīng)常導(dǎo)致更多的代碼清除和垃圾回收工作。若關(guān)心此問題,請(qǐng)監(jiān)視與 ASP.NET Applications 性能對(duì)象關(guān)聯(lián)的 Cache Total Turnover Rate 性能計(jì)數(shù)器。高周轉(zhuǎn)率可能說明存在問題,特別是當(dāng)項(xiàng)在到期前被移除時(shí)。這也稱作內(nèi)存壓力。

  (六) 避免單線程單元 (STA) COM 組件

  默認(rèn)情況下,ASP.NET 不允許任何 STA COM 組件在頁面內(nèi)運(yùn)行。若要運(yùn)行它們,必須在 .aspx 文件內(nèi)將 ASPCompat=true 屬性包含在 @ Page 指令中。這樣就將執(zhí)行用的線程池切換到 STA 線程池,而且使 HttpContext 和其他內(nèi)置對(duì)象可用于 COM 對(duì)象。前者也是一種性能優(yōu)化,因?yàn)樗苊饬藢⒍嗑€程單元 (MTA) 封送到 STA 線程的任何調(diào)用。使用 STA COM 組件可能大大損害性能,應(yīng)盡量避免。若必須使用 STA COM 組件,如在任何 interop 方案中,則應(yīng)在執(zhí)行期間進(jìn)行大量調(diào)用并在每次調(diào)用期間發(fā)送盡可能多的信息。另外,小心不要在構(gòu)造頁面期間創(chuàng)建任何 STA COM 組件。

  總之,我們只有在提高ASP.NET應(yīng)用程序水平,不斷豐富Web站點(diǎn)中新特性的同時(shí),不斷的探索和對(duì)ASP.NET的開發(fā)和優(yōu)化,我們才能建立高質(zhì)量的網(wǎng)站,才能使網(wǎng)站擁有更多的用戶。

黄骅市| 天祝| 油尖旺区| 玉环县| 呼和浩特市| 华池县| 东安县| 海盐县| 贺兰县| 恭城| 陆川县| 梨树县| 乐都县| 马鞍山市| 锡林郭勒盟| 潮州市| 满洲里市| 聂拉木县| 沂源县| 克拉玛依市| 桂林市| 文水县| 泰安市| 广河县| 玉环县| 瓮安县| 九龙城区| 云霄县| 揭东县| 沙河市| 青岛市| 海南省| 庆阳市| 洪泽县| 红安县| 台江县| 囊谦县| 前郭尔| 张家口市| 封开县| 武胜县|