CLR Profiler 性能分析工具 (转)

最近关注程序性能的优化方面,本想写篇CLRProfiler的简要文档,看到pengpeng已写好,那就转载好了,偷偷懒。html

  .Net的尽管拥有很是强大调试器,但也有不少局限性,只限于CLR之上,没法得之CLR的具体细节,并且在多线程上就显得很无力。CLR在运行中隐藏了不少细节,像.net语法糖上的一些细节能够经过reflector得知(.Net  不少api在不一样的版本实现细节也有较大的改动)CLR的运行也能够经过一些工具获得。也许你会问为何也知道这些细节呢?要知道.net也是有不少bug并且.Net中的BCL多数都是在CLR中实现的,经过他咱们能够很清楚找到咱们的代码是怎么运行的,快速的找到代码的运行瓶颈。
  这类工具备不少,如vs自带的性能分析,Windbg,clr profiler。 vs自带的性能分析能够很快的找到瓶颈代码,并且支持多线程。Windbg就更彪悍了,不过使用起来就比较费劲,搭配sos,能够在运行时查看应用程序的一些状态,但没有另外的两种详细。这里主要要说的是CLR Profile了,他检测结果最为详细,不过致命检测会影响应用程序的运行速度而没法得之时间上的性能测试,好像使用的人很少。有空写写windbg:)
      CLR Profiler 有两个版本,分别用于CLR1.1 和 CLR2.0,至于CLR4卧试了一些也能够,但不知道是否彻底兼容不,分别2003,和2005 由微软CLR性能组发布的。几百k很小巧的工具,有给出源代码,核心部分用C++写的,UI使用C#编写。CLR Profiler使用注入式测试,他会记录每一次的内存分配和方法调用,于是严重的影响程序的执行速度,会慢10~100倍的样子,并且没法直接附加到当前运行的进程。 
     CLRProfiler 是个侧重于跟踪分析GC heap的运行状况的的工具。
      使用它你能够知道:
1.那个方法分配了那些类型的对象?
2.那些对象存活下来了?
3.在heap都有些什么?
4.是什么保持对象的存活?
5.在调用统计中能够得知方法被调用的的频率?
6.测试应用程序,asp.net(这个我没整有成功),和service
7.抓dump
8.提供命令行和api(没试过)

     也有不足之处:
1.减缓运行速度,结果不能代表程序的速度
2.不能附加到进程
3.他由于记录了不少内容,若是记录了很长的时间,分析的过程将会好久
4.也就是这个东西,只好用来测试环境,生产环境就得Windbg了api

先给张运行截图,在下面说面各类功能。多线程

main

这是工具的祝界面,start application 选择须要运行的程序,能够选择是否跟踪内存分配和方法调用。当关闭应用程序(能够自动或手动),Profiler自动开始整理结果。显示以下:app

summary

在这里显示本次统计中的汇总。asp.net

Clr Profiler有个抓Dump的功能,固然是及时性的,在程序运行时点击show head now 便可抓取Dump同时很快的统计处分析结果。工具

以下:post

dump

 

 

 

 

dumpinfo

在统计界面上有不少查看详情的按钮:性能

heap statistic 堆栈对象信息统计测试

heap statistic

Allocated :应用程序整个启动周期内分配的对象,按照对象大小排列,不一样的颜色代码不一样的对象,这在右侧会列出,没有截出来,下面的也是这样:优化

allocated objected

 

Relocated:从新移动过的对象,GC以后内存整理移动过的对象:

Rlocated object

Finally head 最终堆栈内对象信息:

final heap object

还有object finalized 和 critical object finalized,表示被终止化器终止的对象,后面那个是特殊标记过的终止对象,图相差不大就没有截取了。

 

 

接下来的就是垃圾回收统计

这个归总了回收次数

GC statistic

GC statistic size

TimeLine:这是详细图(貌似这个得较强的显卡渲染,在公司那机器就出不来)

图中能够清晰的看出各次回收时间和先后内存占用量

GC

 

GC Handle 统计GC句柄数

GC handle

具体细节以下:

 

handle

handle2

其余

summery界面没有显示全部的功能:

在View下面能够找到这些:

main2

在全部的柱形图上右键有以下菜单,show who allocated Is a nice one,经过他能够追踪对象是谁分配的。

right click

assmebly graph

assemble graph

class graph

class graph

call tree 这个功能记录每一个方法的调用次数,感受仍是vs自带分析好些,那个还能统计时间占用:)

calltree

 

和进哥提及这个CLR Profiler,说回去写篇使用说明发出来。终于写好了,写篇还真花时间,这回真的理解live writer的好用,若是在网页里面编辑真要死人了。

这是对CLR Profiler介绍性的文章,具体应用场景在看完应该也能想到。限于篇幅,不少内容没有写出来,在卸载clr profiler中会带有详细的说明,100多页,真的很详细,有了它就不必再去查什么资料了。建议不明白的仍是看看那个为好:)

转自:http://www.cnblogs.com/lulu/archive/2010/08/21/1805444.html

相关文章
相关标签/搜索