性能工具之DOTNET性能分析工具

2018-06-13   出处:7DGroup  作/译者:左泽位  

努力的小伙又有新文章了。

整理自己很重要,慢慢的知识就成体系了。


1.  内存性能分析

内存性能测试软件主要的功能就是记录下一段时间内的内存使用情况,并向用户提供一些查看分析内存使用的辅助功能。相关软件有以下几种:

  • dotTrace MemoryJetBrains公司产品,收费。

  • .Net Memory ProfilerSciTech公司产品,收费

  • ANTS Memory ProfilerRedGate公司产品,收费

    1.1. 内存收集方式:

  • 做一个标记,然后操作软件,完成操作后,生成快照(软件中称内存使用情况为快照)。dotTraceMemory使用这种方式,快照为一个时间段的内存使用情况,其实也就是记录了起始两个时间点的内存使用情况。
    优点:操作方便。如果知道某种软件操作有内存泄露,有目的性的查看内存使用,使用这种方式最快捷。
    缺点:软件没有实时显示内存的使用情况,生成的快照代表一个时间段,所以也不能够记录对象实例的值。

  • 每一个时间点都可以生成一个快照,分析时是对比两个快照来看内存的变化情况。除dotTrancMemory之外,都是使用这种方式来生成快照的。
    优点:提供了实时显示内存使用情况的波形图。操作完成后想马上看内存的变化,这个功能还是很方便的。生成的快照,保存了对象实例的值。
    缺点:操作相比第一种,步骤要多一些。


具体操作

dotTrace Memory

1. 启动程序后会弹出下面一个窗口,点击“Mark Memory”后,程序就开始记录内存信息了。


2. 点击”Mark Memory”,窗口变成了下面的内容,点击“Get Snapshot”,就会记录下软件这段时间内的内存情况。

3. 下面就是生成的快照文件视图。

ANTS Memory Profiler

1. 软件启动并设置好要测试的应用程序后,界面是下面的样子。中上部分是实时显示内存情况的波形图。点击右上方的“TakeMemory Snapshot”按钮就可以生成一个时间点的快照。

2. 生成快照后,后生成以下图片中的情况,一个内存变化的大纲图。Baseline表示基准快照,Current为当前快照,大纲图为当前快照与基准快照的对比图。两个快照都可以使用下拉菜单来选择。第一次基准快照为空。然后就可已经对内存进行分析了。


.Net Memory Profiler

1. 软件启动并设置好要测试的应用程序后,界面是下面的样子。他主体部分包含很多标签页,下面是“Real-Time”实时标签页,用来展现内存的实时情况。点击右侧的“Collectsnapshot”会生成当前时间点的内存快照。

2. 下面是“OverView”标签页用来表示内存变化一个整体情况。ShowSnapshot用来表示当前内存快照,ComparisionSnapshot用来表示基准快照。同样两个都是可以选择的,基准快照第一次也为空。其他的标签页用来以不同的方式查看内存。


1.2.  快照查看功能

udotTraceMemory

dotTrace Meory查看内存非常方便,软件也设计了很多图标,使类,对象,方法等信息一目了然。

左侧栏很方便用户从类、命名空间、对象、引用关系、线程角度来查看内存情况。


1左侧栏

中间部分很明显的显示了内存的包含情况,使用图标显示了很丰富的信息,比如图中:对象,数组,列,对象实例在托管堆中代数。




工具栏中设置了从存在的,已经回收,已经标记为垃圾对象,非托管对象等不同角度来查看内存。还查询功能,能快速查询到特定类或特性方法的内存情况。

软件下方能够显示代码情况。


通过邮件操作,可以打开一个新的标签页查看特定类或对象实例的内存情况。这个功能还很有用的,因为性能的异常主要是某个类出现的问题。

 

uANTSMemory Profiler

ANTS Memory Profiler界面显示它性能分析的基本步骤,基本是从左向右一步一步进行的。

在生成快照后先从”Summay”查看一个整体的内存情况,中间还包含一个”MemoryFragmentation“内存碎片来提示可能包含的内存问题。

如果存在问题,就可以进入”ClassList“视图,查看一下那些类内存突然增加或减少,通过排序很容易找到。


然后应该是查看一下增加或减少了那些对象实例, ”InstanceCategorizer” 用流程图的方式来表示实例及引用关系, ”InstanceList” 用列表的形式表示不同的实例。这里也可以方便的查询出对象实例的值。

2 Instance Categorizer

3 Instance List”

下面ANTSMemory Profiler提供了查看一个对象实例引用关系的一张图。这张图可以使我们可以定位到出现内存问题的具体位置。不过层级关系太多,看起来可能会比较乱。


除此之外,ANTSMemory Profiler还有个Walkthrough用来帮助用户使用软件,使软件入门很方便(英语不好的话,这个就没用了)。


u.NetMemory Profiler

.Net Memory Profiler提供的功能最丰富。他主要通过不同的标签页来以不同的角度来查看内存情况。

“OverView”视图代表整体的内存情况,可以查看各个类的内存变化,同时有方便的查询方式。ShowType可以选择查看不同类型的内存,比如新增\减少的内存,非托管内存等几种。Showhierarchical可以选择从程序集的层级关系查看类的内存情况。Fiter还对一些典型的内存种类做了统计。


4”OverView”

“Type Detail”视图列出来某一类的对象实例使用情况。可以在“OverView”视图中双击某个类打开“TypeDetail”视图。鼠标指向对象实例,还可以显示属性值和调用堆栈。下面也提供了引用关系和调用堆栈的标签页。右侧用图的方式显示的与其他类的调用关系。双击对象实例对会弹出一个“InstanceDetail”视图来具体显示对象实例的内存情况,也包含引用关系,调用对象信息。

5”Type Detail”

6Instance Detail

“Call stack/Method”调用堆栈/方法视图,可以从堆栈或方法查看具体执行过程产生的内存情况。如果就是测试某个方法产生的内存,这个无疑是最方便的。


“Native Memory” 视图提供了非托管内存的变化情况。


7 Native Memory

另外对可能是内存泄露的地方,软件用相应的提示信息。


2.  CPU性能测试


Cpu性能测试包括的概念比较多,不过在代码级别上,我们需要得到是在一段时间内方法执行的次数和时间。这里对一下两个个软件进行了对比:

  • dotTrace Performance:Jet Brains公司,收费

  • ANTS Performance Profiler:RedGate公司,收费

  • dotTracePerformance

dotTrace PerformancedotTrace Memory的操作类似,设置好要测试的程序,启动后在执行操作做做一个标记,完成操作后获取快照,快照就记录下了操作过程中方法使用的CPU时间和调用次数等信息。

8添加标记


9获取快照

查看快照的功能,也与dotTraceMemory类型。

左侧列出了不同的查看方式:大纲图,线程树,调用堆栈树,方法列表,热点图。



10线程视图


10线程视图

11"PlainView"方法列表视图

总的来说,dotTracePerformance使用起来非常简单。

 

uANTSPerformance Profiler

ANTS Performance ProfilerANTS Memory Profiler是同一家公司的产品,风格上也保持了一致。中上部为CPU的实时使用状态,通过鼠标拉动一个区域来测试该时间段内的CPU使用情况。方法的使用情况在中下部分的表格中显示。



Show 下拉列表可以通过不同的方式查看 CPU 使用情况

出了Cpu的使用情况外,ANTSPerformance Profiler还可以显示数据库调用,和FileIO的信息。

u总结

两个软件的差别并不是特别大,查找cpu异常的地方ANTSPerformance Profiler可能更好一些;针对某个软件操作,查看cpu使用情况,dotTracePerformance可能更方便。



欢迎给测试窝投稿或参与内容翻译工作,请邮件至editors@testwo.com。也欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,并与我们的编辑和其他窝友交流。
209°|2094 人阅读|0 条评论

登录 后发表评论
最新文章