发布一个自己开发的性能分析小工具NPerformance(beta),大家来给点意见哈
上一篇文章看地图,找工作!Mashup应用"图聘网"beta上线啦!居然被鉴定成了广告贴,郁闷了一下,看来博客园管理的还蛮严的。
言归正传,大四就要到了,趁出去实习前的空闲时间,花了点时间做了性能分析小工具:NPerformance。(这名字蛮意淫的,哈哈) 。当然目前只是一期的beta版,以后有时间再去完善。
为了方便大家的使用,这个小工具的使用方式是类似与NUnit的。即需要创建一个程序集用于包含要性能分析的代码,再通过GUI(GUI老实说有点丑,而且还有我那蹩脚的英文)来运行这些分析。
在讲使用方式前,大家来看看分析的截图:
在这里引入两个概念
分析用例(AnalysisCase): 代表要进行性能分析的一个方法,方法被AnalysisCase属性标记同时处于分析组中就会被解析成分析用例。
分析组(AnalysisGroup):将分析用例组织成一组,因为一个问题可能有多套解决方案,我们需要分析各套解决方案的性能如何。类被AnalysisGroup属性标记会被解析成分析组。
上图中我们分析的是组StringBuildAnalysis,这个组用来分析字符串拼接的两种方法在性能上的差异。
用例BulidByPlus使用的是+来完成字符串拼接,而BulidByStringBulid使用StringBuilder来完成拼接。时间消耗上大家可以明显的看出来 BulidByStringBulid的5ms明显优于BulidByPlus的126ms。
大家来看看执行分析的代码吧:
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
应该还蛮容易理解的吧。
再看一下一些别的用法:
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
希望大家给小弟多提意见,我来这就是来挨砖的
小弟暑假想在上海或深圳找份实习工作,不知哪位前辈可以给个机会。