改善ASP.NET2.0性能的五件法寶

來源:ITPUB
  大多數ASP.NET程序員都會遇到這樣的問題,當我們的web程序開發週期快要結束的時候,卻發現還有很多性能方面的問題需要解決。如果您遇到這樣的情況,那真是太糟糕了。也許每一個開發人員在開發Web程序時都會制定一個目標,如使用適當的內存以及如何處理Web請求等。雖然這些目標已經制定,但可能仍然會因爲使用某些錯誤的方法來改善應用程序的性能而使事情變得更糟糕。因此,在本文中將給出了五個步驟來優化ASP.NET2.0應用程序,希望這些要點會給讀者以啓迪,以便使廣大的開發人員不會走彎路。

  1. 適當地處理數據訪問對象

  如果我們沒有正確處理數據訪問對象,就會大量消耗我們的服務器內存。當建立一個數據訪問對象時,充分理解它們的生命週期以及不需要它們時如何處置是非常必要的。我經常看到很多開發人員建立、打開和銷燬DataReader對象,但卻不對它做任何處理。如果能確保我們的數據訪問對象適當地被管理,這將在很大程度上解決IIS爲什麼直接機器快崩潰時才釋放內存的另人頭痛的問題。就先讓我們在解決方案中查找關於DataReader實例吧,對於發現的每一個DataReader實例,請確保它們已經被關閉或是被釋放。建議使用try/catch/finally塊來處理。如下面代碼所示:

using (IDataReader reader = MySite.GetSearchResults())
{
//Consume the datareader
while (reader.Read())
{
//Do something with the data
}
)

使用try/catch/finally 塊

IDataReader reader;
try
{
reader = MyWeb.GetSearchResults();
while (reader.Read())
{
//Do something with the data
}
}
catch (Exception ex)
{
//Log the exception
}
finally
{
//如果這個對象存在,dispose這個對象
if (reader != null)
reader.Dispose();
}

  2. 管理IIS應用程序池

  在典型的應用中,當處理一個Web應用程序時,這個Web程序由多個部分組成。通常有我們的主Web站點,一個或多個Web服務,或是一個圖象處理程序。IIS6爲我們提供了爲多個應用程序建立程序池的機會。應用程序池允許我們使應用程序在各自的單獨進程中運行。這麼做的好處是將我們的應用程序的不同組成部分分開,使它們分別運行在自己的內存空間中。由於每個處理進程的內存達到800-900M時系統就會變得很慢,因此,需要應用程序分散到不同的處理進程中,這樣每個工作進程佔有的內存就不會那麼大了。這樣會從某種程度上提高系統運行的效率。關於如果建立應用程序池的問題,請參閱微軟的相關技術文檔。

  3. 管理ASP.NET狀態

  爲了更進一步地改善應用程序性能,對ASP.NET的不同的狀態類型有一個深入的瞭解是非常必要的。ASP.Net有許多不同的狀態,但是我們應該弄清楚什麼是應用程序狀態、會話狀態和profile屬性。因爲這些狀態都保存在服務器的內存上。所有應儘量避免保存太多這三種狀態的數據,除非有必要保存它們。如果我們需要在會話狀態保存數據,就只存我們需要的數據,如標識字段或靜態數據頻繁被使用,因此,它們可以保存在會話狀態中。現在網上有很多關於介紹ASP.NET這三種狀態的文章,如果讀者想更進一步發覺它們的潛力,可以閱讀相關的資料。每一種狀態都應該被使用在適合它們的地方。因此,花時間學習和理解它們是非常必要的。

  在這裏我想給讀者介紹另外一種狀態,視圖狀態,這種狀態將會影響客戶端程序。這種狀態被用來在aspx頁中保存數據,或是在服務端和客戶端之間傳遞數據。在默認情況下,視圖狀態對於ASP.NET和控件是開啓的。但我們的Web頁並不是都需要視圖狀態。如果都開啓,在Web頁中將會有非常多的數據保存在視圖狀態中。解決這個問題的一個正確方法就是使用“View Source"來控制我們的Web頁哪塊數據需要被存儲。我們可以看看ASP.NET發送客戶端的數據,在頁的上端一大塊被加密的數據就是視圖狀態。花一些時間來確定哪些數據需要視圖狀態的值得的。如果某些Web頁和服務端沒有任何數據交互,可以將這些頁的視圖狀態關閉。視圖狀態很靈活,它可以關閉整個頁,也可以只關閉被個用戶控件,或是隻打開某些控件的視圖狀態。如果我們關閉某個頁面或控件的視圖狀態,其它的頁面或控件可以保證正確的工作狀態。

  4. 清除不需要的CSS和腳本文件

  一個快速和容易的改善我們的應用程序性能的方法就是清楚我們程序中的不需要的CSS和腳本文件。有時我們的程序中存在很多舊的CSS,而且在開發程序時,在不斷完善系統的過程中,可能會遺留很多沒用的腳本文件或腳本程序。需要網站使用了一個單獨的CSS或腳本文件來滿足整個網站的需要。這樣做將會產生大量的數據和代碼冗餘。有時,只要簡單地清楚這些文件,就可以通過改變Web頁的大小的方式來改善我們網站的性能。如果我們在網站的代碼中繼續引用不再使用的CSS或腳本文件,那麼在每次加載網頁時它們都會進行被傳輸,這樣將是對網絡資源的一種浪費。我們可以通過運行一個Web頁分析器來準確地知道哪個頁被轉載,哪個頁裝載的時間最長。

  5. 裝載測試和Visual Studio Team系統
  裝載測試從本質上說是發現系統的性能問題,並測量系統在單位時間內的響應次數。Visual Studio Team系統(VSTS)包括了一個強大的簡單的工具,用來對Web程序進行裝載測試,並提供更有價值的報告。使用測試模板可以非常簡單地按着系統所提示的步驟建立一個測試工程。我們可建立一個或多個Web測試,併爲每一個Web測試配置相應的屬性來模擬不同的用戶。

  通過使用VSTS提供的Web頁記錄器,可以紀錄我們爲了建立Web測試而在我們的網站中執行的一系列步驟。Web測試通過模擬的用戶進行測試,這將作爲裝載測試的一部分。我們還可以使用性能監視器在我們的服務器上安裝性能計數器。使用性能計數器監測我們的Web服務器上發生的一些特殊活動數據,如私有字節、虛擬字節以及CPU使用率等。如果我們在應用程序中有內存漏洞,那麼我們很容易通過監視內存來發現這些漏洞。我們所得到的結果將以來於應用程序裝載什麼而有細微的差別,但是我們的Web服務器的內存應該達到一個一致的水平,並保持穩定。圖1顯示了一個VSTS裝載測試的例子。

  6、總結

  上面所提到的五個用於改善Web性能的方法非常快捷,並不需要更多的開發經驗和工作技巧。然而,如果我們決定採用這些步驟來處理我們的Web應用程序時,請對它們做一個仔細的分析,並研究每一個方面以便做出個正確的決定來如何優化。最好的方法是在進行開發之前做一個詳盡的結構圖和計劃書。最後希望讀者可以從本文找到用於改善自己的Web程序性能有用的方法。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章