上一篇文章看地圖,找工作!Mashup應用"圖聘網"beta上線啦!居然被評鑑成了廣告貼,鬱悶了一下,看來部落格園管理的還蠻嚴的。
言歸正傳,大四就要到了,趁出去實習前的空閑時間,花了點時間做了效能分析小工具:NPerformance。(這名字蠻意淫的,哈哈) 。當然目前只是一期的beta版,以後有時間再去完善。
為了方便大家的使用,這個小工具的使用方式是類似與NUnit的。即需要建立一個程式集用於包含要效能分析的代碼,再通過GUI(GUI老實說有點醜,而且還有我那蹩腳的英文)來運行這些分析。
在講使用方式前,大家來看看分析的:
在這裡引入兩個概念
分析用例(AnalysisCase): 代表要進行效能分析的一個方法,方法被AnalysisCase屬性標記同時處於分析組中就會被解析成分析用例。
分析組(AnalysisGroup):將分析用例組織成一組,因為一個問題可能有多套解決方案,我們需要分析各套解決方案的效能如何。類被AnalysisGroup屬性標記會被解析成分析組。
中我們分析的是組StringBuildAnalysis,這個組用來分析字串拼接的兩種方法在效能上的差異。
用例BulidByPlus使用的是+來完成字串拼接,而BulidByStringBulid使用StringBuilder來完成拼接。時間消耗上大家可以明顯的看出來 BulidByStringBulid的5ms明顯優於BulidByPlus的126ms。
大家來看看執行分析的代碼吧:
using System.Text;
using NPerformance.Framework;
namespace NPerformance.Demo
{
[AnalysisGroup]
public class StringBuildAnalysis
{
[AnalysisCase]
public void BulidByPlus()
{
string result = "";
for (int i = 0; i < 5000; i++)
{
result += i + " ";
}
}
[AnalysisCase]
public void BulidByStringBulid()
{
StringBuilder sb=new StringBuilder(1000*3);
for (int i = 0; i < 5000; i++)
{
sb.Append(i + " ");
}
string result = sb.ToString();
}
}
}
使用using NPerformance.Framework;來引入屬性的命名空間。
AnalysisGroup:標記一個用於組織分析用例的類,必須為public
AnalysisCase:標記一個包含分析操作的方法,必須為public
應該還蠻容易理解的吧。
再看一下一些別的用法:
[AnalysisCase(10)]
public void UseLinq()
{
GridView grid = new GridView();
grid.DataSource =
from customer in dataContext.Customers
where customer.CustomerID < 50
select customer;
PerformanceReport.Snapshot("Before DataBind");
grid.DataBind();
PerformanceReport.Snapshot("After DataBind");
}
其中AnalysisCase(10)中的10代表此用例會被重複分析10次。
PerformanceReport.Snapshot("Before DataBind");可以建立當前分析的快照, Before DataBind是快照的名字。
我們來再看幾張圖:
2494ms/249.4ms表示共消耗 2494ms,每次消耗249.4ms
通過快照我們可以知道SqlToLinq在第一次綁定時消耗了絕大數的時間,約2500ms,而後的應該都是載入緩衝的結果。讓我們再看看使用DataReader如何。
可以看出效能比SqlToLinq提高了不少。
那如果效能分析時出現了異常如何?
如上所示,呵呵。
大概的情況大家都應該瞭解了,那如何在實際的項目使用呢?
Framework包:基於.Net 2.0,包含分析屬性,客戶代碼只需引用這個包即可。
Analysis包:基於.Net 3.5,包含分析的核心代碼。
所以您要是想使用的話只需在您的項目引入 Framework包,並編寫相應的分析代碼,最後通過GUI載入該程式集即可。但GUI需要.Net 3.5的支援
不過當前不支援載入宿主AppDomain,所以您在待剖析器集中的config設定檔會載入不了, 所以config配置可能要轉為代碼配置,在此還請各位多多包涵,以後一定完善。
原始碼在此奉上:
/Files/wangqiaosm/NPerformanceRelease.rar
希望大家給小弟多提意見,我來這就是來挨磚的
小弟暑假想在上海或深圳找份實習工作,不知哪位前輩可以給個機會。