【转】CLR Profiler 性能分析工具 (转)

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

.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了

先给张运行截图,在下面说面各种功能。

main

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

summary

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

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

如下:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt学习资料汇总

1. 在线资源 脚本之家在线手册:Qt 快速入门系列教程W3CSchool:Qt 学习之路 2. 书籍资源 链接:https://pan.baidu.com/s/12zoOQykCA-J8x_1FVahFWA 提取码:关注公众号“Qt未来工程师”,后台回复“书籍”获取提取码。 …

魔百盒哪款型号配置高_松下负离子吹风机怎么样哪款好?推荐型号?2020年9月松下负离子电吹风选购攻略...

先说结论,方便时间不多的朋友,松下(panasonic)负离子吹风机怎么样哪款好?推荐型号?1、EH-ENE2-A405——松下(panasonic)负离子电吹风机推荐EH-ENE2-A405。带负离子功能,1…

【转】VS编译环境命令窗口中的命令

先描述一下VS中的几个窗口 命令窗口(Command Window) 利用命令窗口,可以查询并设置变量的值来控制程序的执行和输出,也可以在命令窗口中编写很多小的代码段来改变程序的输出。当程序处于中断模式时,命令窗口只允许输…

【软技能】代码先放一放,学习一下工程的概念

前言 本篇文章适合于以下同学阅读 接触编程时间不长的初学者;经常需要编程,但是对工程的概念相对模糊的同学。 初步认识工程 工程的概念大家或多或少都有接触过。比如在开发环境(如Qt Creator)里编写一个软件,我们…

python程序设计搜题软件_智慧职教APPPython程序设计基础答案搜题公众号

智慧职教APPPython程序设计基础答案搜题公众号更多相关问题暑淫证与火热证的共同点是A.都有明显的季节性B.脉数有力C.发热神昏D.舌红绛每种生物都是有自己特有的一套遗传密码。()患者,女,34岁。营业员&…

【转】WebAPI ASP.Net 发布部署中常见的两个错误未能找到 CodeDom未能加载System.Web.WebPages.Razor

未能加载文件或程序集“System.Web.WebPages.Razor, Version3.0.0.0, Culturene 未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft... 在包管理器中异常安装包MVC5 及 CodeDom,重新编译部署即可…

QSplitter设置宽高比例的正确方法

问题 实际开发中,需要经常调整QSplitter中子窗口的宽度/高度比例。对水平QSplitter来说,是宽度比例;对垂直QSplitter来说,是高度比例。下面以水平QSplitter为例说明。 我们首先应该会想起看看QSplitter是不是有设置比例的函数。…

我要回家软件_工具用的好,下班回家早,推荐几个堪称神器的高效率软件

工具用的好,下班回家早,别人已经早早下班,你还在哼哧哼哧的加班,有时候并不是你比别人慢,而是你没有找到提高工作效率的工具呀,我这次推荐几个堪称神器的高效率软件工具,也许能极大的提高你的工…

【转】带你玩转Visual Studio——01.开篇介绍

开篇之前,先唠叨几句 本人从事C开发工作一年半,总想就C开发方面写点东西。写什么呢?想了一下还是写点跟开发密切相关的吧,要说跟开发最密切相关的那莫过于就是开发工具了,也就是常常说的集成开发环境(IDE)。 这一年多…

Qt中的角度和正方向描述清单

在Qt开发中,不同的API对应有不同的0度和正方向,本文做一个汇总,方便查阅。 函数/模块角度描述画圆弧QPainter::drawArc3点钟方向为0度,逆时针为正向画弦QPainter::drawChord3点钟方向为0度,逆时针为正向画圆饼QPainte…

丢失模式不联网有用吗_用眼过度,打开手机“护眼模式”真的有用吗?

现如今,人们越来越离不开手机,用手机办公或者用手机娱乐,因疫情在家学习的学生们,都需要通过手机来进行学习,深夜剁手的你是不是也躲在被子里,一遍又一遍地刷新着消息,入睡前的最后一件事是关掉…

【基础】Qt-VS调试器下载与配置

前言 因为MSVC版的Qt不自带调试器,所以在Windows上使用MSVC版的Qt进行开发时,需要配置调试器。 本文讲解了在Windows下,下载和配置MSVC版Qt调试器的过程,并给出下载地址。 调试器选择 下表列出了不同平台下的调试器选择方案&am…

【转】带你玩转Visual Studio——02.带你新建一个工程

接着上一篇文章带你玩转Visual Studio——开篇介绍继续讲这个主题&#xff0c;现在我们从创建一个新的工程开始。 一步一步创建项目 依次选择菜单&#xff1a;File\New\Project&#xff0c;打开New Project对话框。<1>.选择项目类型&#xff1a;Win32 Console Applicat…

python seaborn 热图 值对应颜色_基于行值的seaborn热图配色方案

我有一个数据帧&#xff0c;部分是这样复制的&#xff1a;import pandas as pdimport numpy as nptab pd.DataFrame(np.array([[ 46, 39, 25, 29, 21, 12, 33, 32, 70, 109, 144, 158, 161,184, 163, 113, 117, 82, 76, 88, 77, 76, 64, 35],[ 39, 33, 29, 29, 26, 14, 25, 33…

【必知必会】pro文件及常用配置

前言 笔者在工作中了解到&#xff0c;有部分同学对Qt的项目文件&#xff0c;即.pro文件的基本配置编写不是很了解。作为一名Qt工程师&#xff0c;.pro文件的编写也是必会的技能&#xff0c;本文对此进行一个讲解&#xff0c;并将相关资料做一个汇总。 .pro文件的介绍 .pro文…

stm32烧录软件_stm32怎么烧录程序

STM32烧录程序目前笔者知道的有三种&#xff1a;JLink &#xff0c;Ulink和串口烧录&#xff0c;使用工具分别为&#xff1a;JLink&#xff0c;ULink以及USB转TTL线。ULink 烧录程序在安装MDK过程中&#xff0c;会有提示是否安装驱动&#xff0c;该驱动就为ULink驱动&#xff0…

【转】第00课导读:生活中的设计模式——启程之前,请不要错过我

为什么叫设计模式 什么是设计模式设计模式与生活有什么联系为什么要学设计模式如何进行学习为什么选择 Python 弥补市场空缺大势所趋&#xff0c;Python 已然成风简单的 Python 基础 Python 的特点基本语法常用容器 List&#xff08;列表&#xff09;Tuple&#xff08;元组&…

【探究】信号槽到底能不能有返回值?

【探究】信号槽到底能不能有返回值&#xff1f; 前言 Qt信号槽到底可不可以有返回值呢&#xff1f;问了下身边的同事&#xff0c;有的人说可以&#xff0c;有的人说不可以。在实际项目中&#xff0c;确实没看到过有人使用带返回值的信号槽&#xff0c;可以说存在感很低。平时…

python yield 简单用法_通过实例简单了解python yield使用方法

实例代码如下def demo():print("开始执行...")while 1:res yield 这是返回值print("res:",res)d1 demo()print(d1)print(next(d1))print("*"*20)print(next(d1))执行结果如下&#xff1a;开始执行...这是返回值********************res: None这…

【转】第01课:生活中的监听模式——一坑爹的热水器

用程序来模拟生活从剧情中思考监听模式 监听模式监听模式的模型抽象 代码框架类图基于框架的实现模型说明 设计要点推模型和拉模型应用场景 【故事剧情】 刚刚大学毕业的 Tony 只身来到北京这个硕大的城市&#xff0c;开始了北漂的生活。但刚刚毕业的他身无绝技、包无分文&…