[摘要]主要介紹基于ASP.NET應用系統(tǒng)性能優(yōu)化方面問題的解決方案。用于提高web應用程序的應用效果。
[關鍵詞]ASP.NET應用系統(tǒng) 性能優(yōu)化
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0120077-01
一個系統(tǒng)的性能是否良好,已經(jīng)成為系統(tǒng)是否成功的標志之一。下面對基于ASP.NET應用系統(tǒng)性能從四個方面進行探討。
一、編碼級別
編碼級別的優(yōu)化主要注意的問題包括以下幾個方面:
1.數(shù)據(jù)連接。操作數(shù)據(jù)庫最常用的操作就是創(chuàng)建數(shù)據(jù)庫連接,這一系列操作非常耗費資源。在操作過程中應注意:數(shù)據(jù)庫連接盡量晚打開早關閉;盡量使用優(yōu)化過的SQL語句以減少執(zhí)行時間,比如,不在查詢語句中包含子查詢語句、充分利用索引等。
2.數(shù)據(jù)查詢。在數(shù)據(jù)操作中,數(shù)據(jù)查詢是非常普通的操作。提高數(shù)據(jù)查詢操作的性能將對提高應用程序性能有很大的幫助。在數(shù)據(jù)查詢中應注意的事項如下:
(1)Select記錄的時候,只返回需要的字段,不要把所有字段都返回。(2)一般情況下,讀取大量數(shù)據(jù),對返回數(shù)據(jù)不做大量處理用SqlDataReader,對返回數(shù)據(jù)大量處理用dataset比較合適。(3)執(zhí)行多條SQL語句進行查詢時,盡量使用存儲過程來實現(xiàn),避免多次向服務器傳送數(shù)據(jù)。(4)后臺數(shù)據(jù)庫采用SQL Server服務器時,多使用帶有參數(shù)的SQL命令,SQL Server只對命令編譯一次,對于不同的參數(shù)重復使用,節(jié)省了服務器應用效能。
3.字符串操作。字符串操作是應用程序中經(jīng)常使用的功能,如果能夠提高字符串操作的性能,就可以實現(xiàn)提高Web應用程序的性能。
(1)進行字符串連接時,要直接使用“+”將數(shù)字添加到字符串中。(2)大量拼接字符串最好使用StringBuilder來完成操作,耗時會更短。(3)使用值類型的ToString方法可以避免裝箱拆箱操作,避免系統(tǒng)消耗,極大提高性能。(4)如果需要把字符串向客戶端輸出,選擇直接輸出會比拼接后再輸出效果好。
4.釋放資源。對于實現(xiàn)了Dispose模式的類型都可以使用using來確保它能被釋放。對于數(shù)據(jù)庫連接、文件連接和網(wǎng)絡連接等非常重要的資源,我們都可以使用using來確保資源能釋放。
5.異常處理。應通過預先判斷來避免異常的發(fā)生,而不是明知道異??赡軙l(fā)生利用捕獲異常來屏蔽可能的錯誤。
6.使用泛型集合來代替普通集合能夠避免裝箱拆箱操作,提高性能。
二、頁面級別
對于Web系統(tǒng)來說,頁面是很重要的一個部分,客戶端和服務器端就是通過靜態(tài)的HTML、JS等代碼進行交互的。
1.對于需要經(jīng)常更新的數(shù)據(jù),可以使用頁面緩存在一段時間內(nèi)緩存頁面。
2.在使用服務器控件時要避免使用服務器控件視圖狀態(tài)來提高性能。雖然視圖狀態(tài)能夠自動在頁面往返過程中維護服務器控件的狀態(tài),減少開發(fā)者的工作量,但卻使性能降低。因此,在不需要維護控件狀態(tài)的情況下,應該將服務器控件的EnableViewState屬性設置為false。
3.應用中,我們可以使用DataList控件或Repeater控件來替代DataGrid控件來創(chuàng)建類似Excel的列表,可以減少性能上的開銷。
4.盡可能把幾個圖片合成一個圖片來減少向Web服務器請求的次數(shù)。
5.不要把整個頁面放到一個大表格中,使用表格來定義整個頁面。如果這樣做的話,那么頁面只有等到整個頁面全部加載完畢后才會呈現(xiàn)。
6.盡量把CSS分離到單獨的文件中,而不要在每個頁面的頂部都生成一段CSS代碼,CSS文件能被客戶端緩存,使用獨立的CSS文件能夠減少頁面的數(shù)據(jù)量。
7.可以通過Page.IsPostBack判斷是否首次加載頁面來避免重復執(zhí)行一些不必要的代碼。
三、架構級別
系統(tǒng)架構對整個系統(tǒng)性能的影響較大,對分布式系統(tǒng)的性能影響尤其大。
1.數(shù)據(jù)緩存。ASP.NET提供了一些簡單的機制,它們會在不需要為每個頁請求動態(tài)計算頁輸出或數(shù)據(jù)時緩存這些頁輸出或數(shù)據(jù)。另外,通過設計要進行緩存的頁和數(shù)據(jù)請求(特別是在站點中預期將有較大通訊量的區(qū)域),可以優(yōu)化這些頁的性能。
(1)不要緩存太多項。緩存每個項均有開銷,特別是在內(nèi)存使用方面。(2)不要緩存容易重新計算和很少使用的項。(3)給緩存的項分配的有效期不要太短。很快到期的項會導致緩存中不必要的周轉,并且經(jīng)常導致更多的代碼清除和垃圾回收工作。
2.分布式程序。對于分布式程序來說,各個組件之間的通信決定了整個系統(tǒng)的性能。因此需要通過改善通信方式來盡量減少在網(wǎng)絡上傳遞的數(shù)據(jù)的量。(1)跨網(wǎng)段式使用Web服務通信。(2)同一個子網(wǎng)內(nèi)使用REMOTING TCP通道進行通信。(3)同一個機器內(nèi)使用REMOTING IPC通道進行通信。
3.分布靜態(tài)資源。對于大型系統(tǒng),我們可以單獨把系統(tǒng)內(nèi)的所有靜態(tài)資源分布到獨立的服務器上,然后把對這些資源的URL連接通過直接指向這個服務器。
四、配置與部署
IIS(Internet信息服務)的設置決定了整個系統(tǒng)的性能好壞。
1.在部署生產(chǎn)應用程序或進行任何性能測量之前,一定記住禁用調(diào)試模式。如果啟用了調(diào)試模式,應用程序的性能可能受到非常大的影響。所以發(fā)布前要把Web.config中compilation節(jié)點的debug設置為false來禁用調(diào)試。
2.必要時調(diào)整應用程序每個輔助進程的線程數(shù)。進程中有太多線程往往會降低服務器的速度,因為額外的上下文交換導致操作系統(tǒng)將CPU周期花在維護線程而不是處理請求上。
3.不要將日志文件與Web頁存儲在同一個硬盤上。這將阻止硬盤日志記錄線程干預檢索Web頁的線程。
4.在IIS中配置HTTP壓縮可以減少頁面加載時間。
五、結束語
ASP.NET作為全新一代的動態(tài)網(wǎng)頁生成系統(tǒng),它在平臺性能方面與原有的ASP相比已有了一個本質(zhì)的提高。但要在此基礎上開發(fā)出專業(yè)水準的、符合生產(chǎn)標準的、受用戶歡迎的web應用程序,還需要開發(fā)人員在編碼、頁面、架構和配置部署等各方面進行優(yōu)化處理,以提高應用系統(tǒng)的總體性能。
參考文獻:
[1]馮方方,ASP.NET基礎教程[M].北京:清華大學出版社,2005.
[2]賽奎春、王國輝,ASP工程應用與項目實踐[M].北京:機械工業(yè)出版社,2005.
[3]Dino Esposito,ASP.NET 2.0技術內(nèi)幕[M].北京:清華大學出版社,2006.
作者簡介:
周建鯤,男,山東省青島市,中國海洋大學信息科學與工程學院研究生,研究方向:ASP.NET應用系統(tǒng)開發(fā)。