期刊VIP學術指導 符合學術規范和道德
保障品質 保證專業,沒有后顧之憂
摘要:隨著Internet的普及,越來越多的企業建立了自己的WWW網站,企業通過網站可以展示產品,發布最新動態,與用戶進行交流和溝通,與合作伙伴建立聯系,以及開展電子商務等。網站建設在采用了ASP.NET技術的系統性能上有了很大的改善。
關鍵字:ASP.NET、性能 開發 優化
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
中圖分類號:G250.72 文獻標識碼:A 文章編號:2095-2104(2012)
隨著Internet的普及,越來越多的企業建立了自己的WWW網站,企業通過網站可以展示產品,發布最新動態,與用戶進行交流和溝通,與合作伙伴建立聯系,以及開展電子商務等。
一、ASP.NET技術的系統性能的優勢
傳統的網站管理方式有兩種,一是靜態HTML頁面,更新信息時需要重新制作頁面然后上傳頁面并修改相應鏈接,這種方式因為效率太低已不多用。二是基于ASP和腳本語言,將動態網頁和數據庫結合,通過應用程序來處理進行網站管理,這是目前較為流行的做法。但是由于ASP本身的局限性使得系統有一些不可克服的缺陷,而采取了ASP.NET技術的系統性能上有了很大的改善,其主要表現在以下幾方面:
1、由于ASP頁面每次打開都必須經過先編譯后解釋的過程,所以頁面在反復打開時速度沒有任何提升,而ASP.NET頁面只需要一次編譯后不需要重新編譯,直到該頁面被修改或Web應用程序重新啟動。這使得在多次訪問時速度有了極大的提升。
2、由于ASP沒有提供任何輸出數據為內容的元件,所以在使用ASP撰寫數據庫頁面時只能借助ADO的RecordSet對象逐筆讀取記錄,而ASP.NET通過ADO.NET提供的DataGrid等數據庫元件可以直接和數據庫聯系。
3.ASP.NET支持應用程序的實時更新。管理員不必關掉網絡服務器或者甚至不用停止應用程序的運行就可以更新應用文件。應用程序文件永遠不會被加鎖,因此甚至在程序運行時文件就可以被覆蓋。當文件更新后,系統會溫和地轉換到新的版本。
4.ASP.NET采取"code-behind"方式編寫代碼使得代碼更易于編寫,結構更清晰,降低了系統的開發與維護的復雜度和費用。
但是我們用ASP.NET開發網站,無論我們寫的ASP.NET應用程序有多么好,無論在Web站點中添加了多少很酷的新特性,如果我們的站點在處理用戶請求時哪怕只是讓用戶等待了幾秒鐘,用戶也不會對我們的站點留下好印象。事實上,如果用戶等得太久,他們就會放棄而去訪問另一個站點。那么,如何才能提高站點的響應速度,這就要考慮到我們在開發過程中如何優化ASP.NET的性能。這就是我們所說ASP.NET的性能開發及其優化。
二、ASP.NET的性能開發和優化
(一)利用JIT編譯器提高程序執行速度
高性能代碼旨在能少做工作就少做工作,這是不言而明的。
在編譯任何ASP.NET的應用程序時,編譯器把源代碼轉換為Microsoft中間語言(MSIL)。要在一個具體環境中執行應用程序,一個JIT編譯器先接受MSIL輸出并把指令轉換為主機處理的本機指令,再以即時方式編譯代碼,以便應用程序開始執行。但是,JIT編譯器不是把程序集中所有的MSIL都在開始執行前轉換為本機代碼,只是一次編譯一個方法。JIT編譯器采用的這種方法有兩個性能上的優勢。第一個優勢:這項技術把編譯的成本分攤在一個較長的時間內,由于執行會比JIT編譯器把所有的MSIL都進行編譯看起來要快,這樣感覺到應用程序的性能提高了。如果把長時間的暫?;虻却龝r間分成小塊,把它們分散開,你的用戶就不會注意到它們,用戶對你的應用程序的性能也會比較滿意。第二個優勢:JIT編譯器不編譯在執行期間用不到的方法。因此不會做沒有必要的工作,無論什么時候省去不必要的處理工作,你就會發現可以獲得真正的性能增益。
(二)數據庫訪問性能優化
1、使用存儲過程
存儲過程是存儲在服務器上的一組預編譯的SQL語句,類似于DOS系統中的批處理文件。存儲過程具有對數據庫立即訪問的功能,信息處理極為迅速。使用存儲過程可以避免對命令的多次編譯,在執行一次后其執行規劃就駐留在高速緩存中,以后需要時只需直接調用緩存中的二進制代碼即可。另外,存儲過程在服務器端運行,獨立于ASP.NET程序,便于修改,最重要的是它可以減少數據庫操作語句在網絡中的傳輸。
2、優化查詢語句
ASP.NET中ADO連接消耗的資源相當大,SQL語句運行的時間越長,占用系統資源的時間也越長。因此,盡量使用優化過的SQL語句以減少執行時間。
(三)字符串操作性能優化
1、使用值類型的ToString方法
在連接字符串時,經常使用"+"號直接將數字添加到字符串中。這種方法雖然簡單,也可以得到正確結果,但是由于涉及到不同的數據類型,數字需要通過裝箱操作轉化為引用類型才可以添加到字符串中。但是裝箱操作對性能影響較大,因為在進行這類處理時,將在托管堆中分配一個新的對象,原有的值復制到新創建的對象中。使用值類型的ToString方法可以避免裝箱操作,從而提高應用程序性能。
2、運用StringBuilder類
String類對象是不可改變的,對于String對象的重新賦值在本質上是重新創建了一個String對象并將新值賦予該對象,其方法ToString對性能的提高并非很顯著。在處理字符串時,最好使用StringBuilder類,其.NET 命名空間是System.Text。該類并非創建新的對象,而是通過Append,Remove,Insert等方法直接對字符串進行操作,通過ToString方法返回操作結果。
(四)優化 Web 服務器計算機和特定應用程序的配置文件以符合您的特定需要
默認情況下,ASP.NET 配置被設置成啟用最廣泛的功能并盡量適應最常見的方案。因此,應用程序開發人員可以根據應用程序所使用的功能,優化和更改其中的某些配置,以提高應用程序的性能。
1、僅對需要的應用程序啟用身份驗證。
默認情況下,身份驗證模式為 Windows,或集成 NTLM。大多數情況下,對于需要身份驗證的應用程序,最好在 Machine.config 文件中禁用身份驗證,并在 Web.config 文件中啟用身份驗證。根據適當的請求和響應編碼設置來配置應用程序。ASP.NET 默認編碼格式為 UTF-8。如果您的應用程序為嚴格的 ASCII,請配置應用程序使用 ASCII 以獲得稍許的性能提高。
2、考慮對應用程序禁用 AutoEventWireup。
在 Machine.config 文件中將 AutoEventWireup 屬性設置為 false,意味著頁面不將方法名與事件進行匹配和將兩者掛鉤(例如 Page_Load)。如果頁面開發人員要使用這些事件,需要在基類中重寫這些方法(例如,需要為頁面加載事件重寫 Page.OnLoad,而不是使用 Page_Load 方法)。如果禁用 AutoEventWireup,頁面將通過將事件連接留給頁面作者而不是自動執行它,獲得稍許的性能提升。
3、從請求處理管線中移除不用的模塊。
默認情況下,服務器計算機的 Machine.config 文件中 節點的所有功能均保留為激活。根據應用程序所使用的功能,您可以從請求管線中移除不用的模塊以獲得稍許的性能提升。檢查每個模塊及其功能,并按您的需要自定義它。例如,如果您在應用程序中不使用會話狀態和輸出緩存,則可以從 列表中移除它們,以便請求在不執行其他有意義的處理時,不必執行每個模塊的進入和離開代碼。
(五)只要可能,就緩存數據和頁輸出
ASP.NET 提供了一些簡單的機制,它們會在不需要為每個頁請求動態計算頁輸出或數據時緩存這些頁輸出或數據。另外,通過設計要進行緩存的頁和數據請求(特別是在站點中預期將有較大通訊量的區域),可以優化這些頁的性能。與 .NET Framework 的任何 Web 窗體功能相比,適當地使用緩存可以更好的提高站點的性能,有時這種提高是超數量級的。使用 ASP.NET 緩存機制有兩點需要注意。
1、不要緩存太多項。緩存每個項均有開銷,特別是在內存使用方面。不要緩存容易重新計算和很少使用的項。
2、給緩存的項分配的有效期不要太短。很快到期的項會導致緩存中不必要的周轉,并且經常導致更多的代碼清除和垃圾回收工作。若關心此問題,請監視與 ASP.NET Applications 性能對象關聯的 Cache Total Turnover Rate 性能計數器。高周轉率可能說明存在問題,特別是當項在到期前被移除時。這也稱作內存壓力。
(六) 避免單線程單元 (STA) COM 組件
默認情況下,ASP.NET 不允許任何 STA COM 組件在頁面內運行。若要運行它們,必須在 .aspx 文件內將 ASPCompat=true 屬性包含在 @ Page 指令中。這樣就將執行用的線程池切換到 STA 線程池,而且使 HttpContext 和其他內置對象可用于 COM 對象。前者也是一種性能優化,因為它避免了將多線程單元 (MTA) 封送到 STA 線程的任何調用。使用 STA COM 組件可能大大損害性能,應盡量避免。若必須使用 STA COM 組件,如在任何 interop 方案中,則應在執行期間進行大量調用并在每次調用期間發送盡可能多的信息。另外,小心不要在構造頁面期間創建任何 STA COM 組件。
總之,我們只有在提高ASP.NET應用程序水平,不斷豐富Web站點中新特性的同時,不斷的探索和對ASP.NET的開發和優化,我們才能建立高質量的網站,才能使網站擁有更多的用戶。