在編寫ASP
NET應用程序的時候
你會花費多長的時間來考慮性能的問題?很不幸
大多數開發者都對性能問題感到很後悔
性能的規劃和設計真的需要放在前面和中心位置
你需要考慮自己的目標
並且確保把良好的性能作為目標之一
接著你需要評估自己的程序
評估的方面越多
改善性能的機會就越大
在本文中我將解釋微軟Visual Studio企業版中包含的一個重要工具
微軟Application Center Test
嚴肅的Web開發者都應該把這個工具放在自己的工具包中
Application Center Test 在離開微軟之前
我參加了
個城市的ASP
NET說明會
其中一個覆蓋了性能問題
並且給很多開發者介紹了微軟Application Center Test
這個工具總是生成大量的有趣的信息
我對它有很多疑問
你會發現Application Center Test是Application Center(可以在舊的MSDN CD或DVD中找到)的一部分
或者安裝在Visual Studio
NET企業版的Visual Studio
NET
\Visual Studio
NET Enterprise Features目錄下面
當你第一次打開Application Center Test的時候
你可以看到一個用於導航可用的測試
結果和用戶的樹視圖
首先
我希望顯示出很容易建立測試
使用Application Center Test 首先
建立一個簡單的Web應用程序
例如
我將使用圖
所示的頁面(請注意
我使用了一些聯機編寫ASP
NET頁面的小技巧
你不需要編寫完整的Page_Load事件聲明)
示例Web應用程序 <%@ Page Language=
C#
%>
<%@ Import Namespace=
System
Data
%>
<%@ Import Namespace=
System
Data
SqlClient
%>
<%@ Import Namespace=
System
Configuration
%>
<script runat=
server
>
public void Page_Load() {
using(SqlConnection connection =
new SqlConnection(ConfigurationSettings
AppSettings[
Northwind
]))
{
SqlCommand command = new SqlCommand(
SELECT * FROM Products
connection);
connection
Open();
DataGrid
DataSource = command
ExecuteReader();
DataGrid
DataBind();
}
}
</script>
<form runat=
server
>
<asp:DataGrid id=
DataGrid
runat=
server
/>
</form>
上面的代碼雖然不是推薦的用於構造應用程序的方法
但是它也足夠簡單
我們能夠在它上面執行一些基本的測試
在Web浏覽器中打開這個頁面會返回一個填充了的數據表格
它顯示為HTML表格
現在你知道這個頁面可以工作了
把鏈接復制到剪貼板上
你還需要使用它的
在我的計算機上這個例子的鏈接是x
下一步
導航到Application Center Test
右鍵點擊
Tests(測試)
並選擇
New Test(新建測試)
它會打開
新建測試向導
歡迎頁面
點擊
下一步
選擇新測試的源代碼
並選中
記錄新測試
再次點擊
下一步
以選擇測試類型
提示選擇腳本語言(我們不修改默認值)的時候
點擊
下一步
出現了圖
所示的界面
圖
新建測試向導
記錄測試
使Application Center Test易於使用
點擊
開始記錄
會打開一個新的浏覽器實例
不要在地址欄中輸入URL(應該為about:blank)
我們的操作是
在這個新的浏覽器實例中選擇Tools | Internet選擇
並浏覽
連接
屬性頁
接著點擊
局域網設置
按鈕
會看到圖
所示的界面
圖
連接設置
你會發現代理服務器(proxy)設置信息被填充了
並且與正常值不同
這是因為Application Center Test打開了一個新的浏覽器實例並指示它使用Application Center Test運行的專用代理服務器
經過浏覽器的任何請求都會被Application Center Test代理捕捉到
為了完成測試
請關閉浏覽器對話框並把用於測試的ASP
NET頁面的鏈接粘貼到地址欄中
點擊浏覽器的
轉到
按鈕或直接按下回車鍵
再次出現了數據表格
下一步
關閉浏覽器
你可能看到與圖
類似的信息
圖
捕捉到的請求
上面的對話框中的請求的詳細信息部分現在被Application Center Test代理捕捉到的請求所填充了
這也是浏覽器發送的HTTP請求
現在點擊
停止記錄
接著點擊
下一步
你會得到一個提示
需要給該測試輸入一個名稱(我用的是
My Test
)
接著你可以點擊
完成
關閉向導
恭喜你!你現在是一個性能測試工程師了
很容易
對嗎?
你還可以選擇很多其它的設置信息和配置選項
你右鍵點擊
測試
列表中的
My Test
節點並選擇
屬性
可以看到這些設置
在這些選項中你可以模擬多個浏覽器
多個用戶
熱身
時間的參數(不會被報告其結果)以及測試的持續時間
你可以以後研究這些設置並閱讀一些討論測試原理和測試策略的文章
我們不在細節上花費太多時間
直接運行測試吧
運行測試並建立基線 要運行剛才建立的測試
只需要簡單地右鍵點擊該測試並選擇
開始測試
測試開始以後
點擊
顯示詳細信息
按鈕
細節框中將顯示正在運行的測試的一個圖表
同時顯示在運行測試過程中可能出現的任何錯誤(圖
所示)
第一次運行這個測試建立了基線
我們可以把它與當前的和未來的性能進行對比
圖
顯示的基線是每秒大約
個請求
圖
基線圖表
現在你擁有了一個確定的基線了
你可以對應用程序作一些修改以測量修改所引起的性能提升或降低
的確
我使用的測試示例極其簡單
但是我會顯示出對這一小段代碼進行少量的修改可能對應用程序的性能產生很大的影響
了解改善的部分 評估的方面越多
改善的機會就越大
在例子中我將對應用程序作一些小的修改
並在每個修改之後進行評估
盡管在現實情況下你不可能每步修改都進行這樣的測試
但是你應該有周期性檢查性能的習慣
對於我們公司的Community Server產品
我們擁有一套用於評估總體應用程序開銷的基線
如果進行了重大的修改
開發者就可以使用前面的測試數據來研究性能的提升或降低
我對示例應用程序的第一處修改是改變返回數據量的限制
我把SQL查詢SELECT * FROM Products改變為SELECT TOP
* FROM Products
這好像只是對代碼進行了微小的修改
畢竟我只是限制屏幕中輸出的數據量
但是其結果卻是驚人的
其性能從每秒
個請求上升到
以上
性能提高了
%以上
由於你擁有基線
你知道了限制綁定到數據表格的數據量一定會影響性能
我還要修改其它一些東西
下一步
修改<asp:DataGrid/>服務器控件
添加EnableViewState=
false
<asp:DataGrid EnableViewState=
false
id=
DataGrid
runat=
server
/>
ViewState是ASP
NET的一個重要的特性
但是並非總是需要的
實際上
大多數使用了ViewState的數據表格都是不需要它的
在例子中
通過禁止ViewState
我可以提高
%的性能
我們繼續!
下一步
添加下面的代碼以激活輸出緩沖(OutputCaching)
<%@ OutputCache Duration=
VaryByParam=
none
%>
圖
輸出緩沖
現在重新運行該測試
太驚人了!性能提高了
%
如圖
所示
你可以調整OutputCache的持續數值
例如把OutputCache的持續值設置為
秒
你可以看到性能再次有很大的變化
建立測試環境 測試操作是CPU密集型的事務
因此在運行測試的時候
你可能看到CPU的占用率接近
%
它在與測試部件分享CPU時間的時候會拿走正在測試的應用程序的資源
所有的配置選項都會影響測試結果
其中一部分模擬現實世界要真實一些
例如
如果SQL Server和ASP
NET在同一台計算機上
就無法模擬網絡I/O的開銷
大多數應用程序使用的數據庫都不在Web服務器上
為了建立真實的測試環境
把大量的舊的用於開發的計算機作為客戶端使用
不要使用虛擬機
在這些計算機上運行Application Center Test
下一步盡可能地模擬現實世界
在一個沒有運行其它任何應用程序的服務器操作系統上運行該Web應用程序
並且連接到另一台服務器的數據庫
需要說明的是
在開發環境中運行
煙幕
測試也沒有什麼錯誤
煙幕測試不能模擬現實世界
但是仍然可以提供大量的有價值的數據
並且可以用於預計在現實世界中同樣的測試產生的結果
後續的步驟和測試覆蓋 現在你對如何測試和評估有了一些了解了
我推薦你在自己的應用程序上使用Application Center Test
了解你的用戶在典型情況下如何使用應用程序是有好處的
哪些頁面執行得更好
哪些頁面沒有改善?
例如
在Community Server中我們運行了多種類型的性能測試
主線(Mainline)測試包含了匿名和驗證的情況
在大量個性化的應用程序中這一點可能顯著的改變性能情況
主線測試還包含了貫穿系統的通用路徑
例如網絡日志
圖表
論壇的主視圖
以及每個屏幕的不同視圖
很明顯
這些主線情形良好的執行情況是非常重要的
最好在這兒花費大量的時間以確保其正確性
如果你管理或運行那些必須支持兩個或多個並發用戶
From:http://tw.wingwit.com/Article/program/net/201311/13214.html