内存性能测试软件主要的功能就是记录下一段时间内的内存使用情况,并向用户提供一些查看分析内存使用的辅助功能。相关软件有以下几种:
1. 做一个标记,然后操作软件,完成操作后,生成快照(软件中称内存使用情况为“快照”)。dotTrace Memory使用这种方式,快照为一个时间段的内存使用情况,其实也就是记录了起始两个时间点的内存使用情况。
优点:操作方便。如果知道某种软件操作有内存泄露,有目的性的查看内存使用,使用这种方式最快捷。
缺点:软件没有实时显示内存的使用情况,生成的快照代表一个时间段,所以也不能够记录对象实例的值。
2. 每一个时间点都可以生成一个快照,分析时是对比两个快照来看内存的变化情况。除dotTranc Memory之外,都是使用这种方式来生成快照的。
优点:提供了实时显示内存使用情况的波形图。操作完成后想马上看内存的变化,这个功能还是很方便的。生成的快照,保存了对象实例的值。
缺点:操作相比第一种,步骤要多一些。
1. 启动程序后会弹出下面一个窗口,点击“Mark Memory”后,程序就开始记录内存信息了。
2.点击”Mark Memory”,窗口变成了下面的内容,点击“Get Snapshot”,就会记录下软件这段时间内的内存情况。
3. 下面就是生成的快照文件视图
1. 软件启动并设置好要测试的应用程序后,界面是下面的样子。中上部分是实时显示内存情况的波形图。点击右上方的“Take Memory Snapshot”按钮就可以生成一个时间点的快照。
2.生成快照后,后生成以下图片中的情况,一个内存变化的大纲图。Baseline表示基准快照,Current为当前快照,大纲图为当前快照与基准快照的对比图。两个快照都可以使用下拉菜单来选择。第一次基准快照为空。然后就可已经对内存进行分析了。
1. 软件启动并设置好要测试的应用程序后,界面是下面的样子。他主体部分包含很多标签页,下面是“Real-Time”实时标签页,用来展现内存的实时情况。点击右侧的“Collect snapshot”会生成当前时间点的内存快照。
下面是“OverView”标签页用来表示内存变化一个整体情况。Show Snapshot用来表示当前内存快照,Comparision Snapshot用来表示基准快照。同样两个都是可以选择的,基准快照第一次也为空。其他的标签页用来以不同的方式查看内存。
dotTrace Meory查看内存非常方便,软件也设计了很多图标,使类,对象,方法等信息一目了然。
左侧栏很方便用户从类、命名空间、对象、引用关系、线程角度来查看内存情况。
中间部分很明显的显示了内存的包含情况,使用图标显示了很丰富的信息,比如图中:对象,数组,列,对象实例在托管堆中代数。
具栏中设置了从存在的,已经回收,已经标记为垃圾对象,非托管对象等不同角度来查看内存。还查询功能,能快速查询到特定类或特性方法的内存情况。
软件下方能够显示代码情况。
通过邮件操作,可以打开一个新的标签页查看特定类或对象实例的内存情况。这个功能还很有用的,因为性能的异常主要是某个类出现的问题。
ANTS Memory Profiler界面显示它性能分析的基本步骤,基本是从左向右一步一步进行的。
在生成快照后先从”Summay”查看一个整体的内存情况,中间还包含一个”Memory Fragmentation“内存碎片来提示可能包含的内存问题
如果存在问题,就可以进入”Class List“视图,查看一下那些类内存突然增加或减少,通过排序很容易找到。
然后应该是查看一下增加或减少了那些对象实例,”Instance Categorizer”用流程图的方式来表示实例及引用关系,”Instance List”用列表的形式表示不同的实例。这里也可以方便的查询出对象实例的值。
下面ANTS Memory Profiler提供了查看一个对象实例引用关系的一张图。这张图可以使我们可以定位到出现内存问题的具体位置。不过层级关系太多,看起来可能会比较乱。
除此之外,ANTS Memory Profiler还有个Walkthrough用来帮助用户使用软件,使软件入门很方便(英语不好的话,这个就没用了)。
.Net Memory Profiler提供的功能最丰富。他主要通过不同的标签页来以不同的角度来查看内存情况。
“OverView”视图代表整体的内存情况,可以查看各个类的内存变化,同时有方便的查询方式。Show Type可以选择查看不同类型的内存,比如新增\减少的内存,非托管内存等几种。Show hierarchical可以选择从程序集的层级关系查看类的内存情况。Fiter还对一些典型的内存种类做了统计。
“Type Detail”视图列出来某一类的对象实例使用情况。可以在“OverView”视图中双击某个类打开“Type Detail”视图。鼠标指向对象实例,还可以显示属性值和调用堆栈。下面也提供了引用关系和调用堆栈的标签页。右侧用图的方式显示的与其他类的调用关系。双击对象实例对会弹出一个“Instance Detail”视图来具体显示对象实例的内存情况,也包含引用关系,调用对象信息。
“Call stack/Method”调用堆栈/方法视图,可以从堆栈或方法查看具体执行过程产生的内存情况。如果就是测试某个方法产生的内存,这个无疑是最方便的。
“Native Memory”视图提供了非托管内存的变化情况。
另外对可能是内存泄露的地方,软件用相应的提示信息。
dotTrace Memory |
不足: 没有实时查看内存的功能。 不能查看快照实例对象的值。 优点: 查看快照的功能比另外两种都方便快捷,用户体验好。 |
ANTS Memory Profiler |
不足: 没有堆栈\方法视图,这是硬伤。 实时显示图占据很大面积,查看快照的面积相对较小。 优点: 相比.Net Memory Profiler界面风格较好,上手容易 |
.Net Memory Profiler |
除界面外没有明显不足,功能强大。 比其他两种要多花点时间熟悉。 |
ANTS Memory Profiler: http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/walkthrough
.Net Memory Profiler: http://www.cnblogs.com/eaglet/archive/2008/09/05/1285169.html
Cpu性能测试包括的概念比较多,不过在代码级别上,我们需要得到是在一段时间内方法执行的次数和时间。这里对一下两个个软件进行了对比:
dotTrace Performance和dotTrace Memory的操作类似,设置好要测试的程序,启动后在执行操作做做一个标记,完成操作后获取快照,快照就记录下了操作过程中方法使用的CPU时间和调用次数等信息
查看快照的功能,也与dotTrace Memory类型。
左侧列出了不同的查看方式:大纲图,线程树,调用堆栈树,方法列表,热点图。
线程视图
"PlainView"方法列表视图
总的来说,dotTrace Performance使用起来非常简单。
ANTS Performance Profiler与ANTS Memory Profiler是同一家公司的产品,风格上也保持了一致。中上部为CPU的实时使用状态,通过鼠标拉动一个区域来测试该时间段内的CPU使用情况。方法的使用情况在中下部分的表格中显示。
Show下拉列表可以通过不同的方式查看CPU使用情况
出了Cpu的使用情况外,ANTS Performance Profiler还可以显示数据库调用,和FileIO的信息。
两个软件的差别并不是特别大,查找cpu异常的地方ANTS Performance Profiler可能更好一些;针对某个软件操作,查看cpu使用情况,dotTrace Performance可能更方便。
在Window SDK提供了一套wpf测试工具,称为WPF Performance Suite。在.Net3.0中它包含五个部分Perforator(分析器), Visual Profiler(可视化探查器), Working Set Analyzer(工作集分析器), Event Trace(事件跟踪), ETW Trace Viewer(ETW 跟踪查看器)。但从.Net 3.5以后就只包含Perforator(分析器), Visual Profiler(可视化探查器)。其他三个好像功能并入的其他工具(有个Windows Performance Analyzer)中。
一般从网上下载的安装包,我们使用后发现无法对软件进行分析。这是因为一般查到的安装包版本比较低,只支持到.net 3.5。最新的安装包被进程到了Window SDK的新版本中。
下载地址http://www.microsoft.com/en-us/download/details.aspx?id=8442。
如果安装过旧版本,应该先卸载旧版本。安装包比较大,64位系统的我已经下载,可以向我要。安装完还要安装一个修复包,不然有些情况Visual Profiler不能使用。可以参考这篇文章进行安装http://blogs.msdn.com/b/jgoldb/archive/2010/08/24/timezone-patch-to-wpf-performance-profiling-tools-for-wpf-4-is-now-available.aspx。
具体的使用教程,有以下msdn的文章:http://msdn.microsoft.com/en-us/library/aa969767%28v=vs.100%29.aspx
Perforator还没看太懂,结合硬件的东西多一些;Visual Profiler还是很有用的,主要显示了控件级别的性能信息。