吳麗萍 張林霞 于廣州
【摘 要】本文首先簡單介紹了asp.net2.0的概括和特性,然后列舉出幾個影響asp.net應用程序性能的標準,最后結合開發(fā)asp.net2.0應用程序的經驗總結出了幾條改進asp.net2.0應用程序性能的方法。
【關鍵詞】ASP.NET2.0web調試
一、ASP.NET 2.0新特性
ASP.NET 2.0技術增加了大量方便、實用的新特性。ASP.NET 2.0主要提供控件、頁面框架、服務與APIs等3個方面的技術特性。
1.控件在ASP.NET 1.x時代,由于內置服務器控件數量有限、功能覆蓋面窄。為了消除這個技術軟肋,ASP.NET 2.0做出了突破性改進。在ASP.NET 2.0中,新增數十個服務器控件。根據控件功能特征,可分為:數據控件(包括數據源控件和數據綁定控件)、登錄系列控件、Web部件、站點導航控件和其他控件等。這些服務器控件對于提高工作效率,降低開發(fā)成本有著重要作用。2.頁面框架在頁面框架方面,ASP.NET 2.0同樣做出了重大改進,主要體現在以下4項技術特性:母版頁、主題和皮膚、編譯機制和本地化。母版頁特性在大型Web站點中應用廣泛,它能夠在一定程度上代替框架頁功能,從而迅速建立具有統一布局和外觀的頁面,并且有效降低維護人員的工作強度。主題和皮膚是ASP.NET 2.0的一項新增功能,使用此功能可以一次性設置一種類型的服務器控件外觀樣式。該外觀可方便地應用于單個頁面、整個Web應用程序,甚至整個服務器。在應用程序編譯方面,ASP.NET 2.0提供了幾種替代方案,從而擴大了編譯的選擇范圍,開發(fā)人員可以根據特定需要進行選擇。另外,ASP.NET 2.0在本地化方面也做出了一些改進。
3.服務與APIS這個部分包括的新特性在ASP.NET 2.0中占有較大比例,主要包括成員資格管理、角色管理、用戶配置、數據緩存、配置與管理工具等。利用這些功能,可以快速實現用戶和角色管理、個性化用戶配置、數據緩存、應用程序可視化配置等任務。以成員資格和角色管理功能為例,在ASP.NET 1.x時代,實現這兩項功能是比較繁瑣和困難的;而在ASP.NET 2.0中不僅提供默認數據庫表,而且只需調用幾個簡單的方法,就能夠輕松地實現成員和角色管理功能。
二、影響ASP.NET應用程序性能的度量標準1.執(zhí)行時間
處理一個請求所需的時間,通常按服務器向客戶端返回的第一個字節(jié)和最后一個字節(jié)之間的時間計算。執(zhí)行時間直接影響吞吐量的計算。
2.響應時間
從發(fā)出請求到服務器向客戶端返回第一個字節(jié)之間的時間長度。對于客戶端用戶,這通常是性能中最直觀的一個方面。如果應用程序響應時間很長,用戶可能會覺得不耐煩,并轉到另一個站點。應用程序的響應時間的改變與吞吐量的速率無關(甚至成反比)。
3.可縮放性
用于衡量應用程序在獲取更多資源(內存、處理器或計算機)時更好地執(zhí)行的能力。它經常按吞吐量相對于處理器數的更改速率計算。
4.吞吐量
web應用程序在單位時間之內可以處理的請求數,經常以每秒請求數衡量。吞吐量可以根據應用于服務器的加載(客戶端線程數)而不同,這通常被視為要優(yōu)化的最重要的性能度量。為
了編寫正常且高效執(zhí)行的應用程序,務必要保持這些度量的合理取值范圍。
三、改進ASP.ENT應用程序的性能
ASP.NET 2.0模型提供了許多內置的性能增強功能,尤其是在HTTP請求的處理方面的兩項功能:第一,當首次請求ASP.NET頁面時,將動態(tài)編譯Page類的實例。公共語言運行時(CLR)會將ASP.NET托管頁代碼實時編譯為處理服務器的本機代碼。第二,當為第一個請求編譯Page類實例后,就將其緩存到服務器上。對于隨后對該頁的每個請求,將執(zhí)行該類緩存的實例。除非該頁的初始源或它的一個依賴項發(fā)生更改,否則對Page類的編譯只發(fā)生在最初請求之后,這極大地提高了ASP.NET頁面的訪問速度。但要保證用戶所編寫的應用程序能夠同時處理多個HTTP請求,從而改善ASP.NET應用程序的性能,還需從以下幾個方面著手來確保所編寫的代碼能夠達到較高的性能級別。
1.及時處理數據訪問對象
在給予ASP.NET 2.0的應用程序中,如果沒有正確處理數據訪問對象,就會大量消耗的服務器內存。當建立一個數據訪問對象時,充分理解這些控件的生命周期,并且能在不需要時即使進行處理是非常必要的,這樣能確保數據訪問對象適當地被管理,避免服務器在內存占用過多的情況下才進行內存釋放。
2.合理應用IIS應用程序池
在典型的應用中,當處理一個Web應用程序時,這個Web程序由多個部分組成。通常有主Web站點,一個或多個Web服務,或是一個圖像處理程序。應用程序池允許使應用程序在各自的單獨進程中運行,將我們的應用程序的不同組成部分分開,使它們分別運行在自己的內存空間中。由于每個處理進程的內存達到800-900M時系統就會變得很慢,因此,需要應用程序分散到不同的處理進程中,這樣每個工作進程占有的內存就不會那么大了,這樣會從某種程度上提高系統運行的效率。
3.正確管理ASP.NET狀態(tài)
為了更進一步地改善應用程序性能,對ASP.NET的不同的狀態(tài)類型有一個深入的了解是非常必要的。ASP.Net有許多不同的狀態(tài),分別是應用程序狀態(tài)、會話狀態(tài)和profile屬性,這些狀態(tài)都保存在服務器的內存上。所以應盡量避免保存太多這三種狀態(tài)的數據,除非有必要保存它們。例如,如果需要在會話狀態(tài)保存數據,就只存需要的數據,如標識字段或靜態(tài)數據頻繁被使用。因此,它們可以保存在會話狀態(tài)中。
4.清除不需要的CSS和腳本文件
一個快速和容易的改善應用程序性能的方法就是清楚程序中的不需要的CSS和腳本文件。在開發(fā)程序時,在不斷完善系統的過程中,可能會遺留很多沒用的腳本文件或腳本程序。需要網站使用了一個單獨的CSS或腳本文件來滿足整個網站的需要。這樣做將會產生大量的數據和代碼冗余。如果在網站的代碼中繼續(xù)引用不再使用的CSS或腳本文件,那么在每次加載網頁時它們都會進行被傳輸,這樣將是對網絡資源的一種浪費??梢酝ㄟ^運行一個Web頁分析器來準確地知道哪個頁被轉載,哪個頁裝載的時間最長。
5.對系統進行測試
裝載測試從本質上說是發(fā)現系統的性能問題,并測量系統在單位時間內的響應次數。Visual Studio Team系統(VSTS)包括了一個強大的簡單的工具,用來對Web程序進行裝載測試,并提供更有價值的報告。使用測試模板可以非常簡單地按著系統所提示的步驟建立一個測試工程??山⒁粋€或多個Web測試,并為每一個Web測試配置相應的屬性來模擬不同的用戶。Web測試通過模擬的用戶進行測試,這將作為裝載測試的一部分。還可以使用性能監(jiān)視器在服務器上安裝性能計數器。使用性能計數器監(jiān)測Web服務器上發(fā)生的一些特殊活動數據,如私有字節(jié)、虛擬字節(jié)以及CPU使用率等。如果在應用程序中有內存漏洞,那么很容易通過監(jiān)視內存來發(fā)現這些漏洞。所得到的結果將以來于應用程序裝載什么而有細微的差別,但是Web服務器的內存應該達到一個一致的水平,并保持穩(wěn)定。
四、總結
上面所提到的幾個個用于改善Web性能的方法非??旖?,并不需要更多的開發(fā)經驗和工作技巧。本文提到的提高ASP.Net性能的策略只是一個起步,只有通過自己的實踐,才能找到對每一個不同項目最有幫助的技巧。然而,在任何一個開發(fā)旅程中,這些策略可以起一些必要的指導作用。
參考文獻:
[1]李應偉等.ASP.NET數據庫高級教程.清華大學出版社,2004,7.
[2]Chris Knowles.ASP.NET XML高級縞程.清華大學出版社,2002,12.
[3]三味工作室.SQL Server 2000.人民郵電出版社,2000,11.
[4]曾誠.高性能ASP.NET應用程序的探討與研究.湖北大學學報(自然科學版),2004,26(1):19-22.
[5]于瑞國等.ASP.NET新特性的初步研究[J].電子計算機,2002,(2):11-14.
(作者單位:廣東海洋大學)