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