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