使用Dottrace跟踪代码执行时间
当自己程序遇到性能问题,比如IIs请求反应缓慢,客户端程序执行缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过长,然后再分析应该怎样解决。
Dottrace是由JetBrainshttp://www.jetbrains.com/ 公司开发的一款产品,它分dottrace Performance和dottrace Memory 两个工具,dottrace Performance用来分析代码性能,比如函数执行时间,调用次数,消耗时间比率等,dottrace Memory一般用来分析内存占用情况。dottrace可以跟踪.net编写的:应用程序,IIS挂接的程序,windows服务,silverlight,WCF服务程序等。还可以把跟踪的文件,以快照的方式保存下来,保存为dtp后缀的文件。跟踪后的结果,如果能找到对应用户的代码信息,还可以直接查看对应的源代码,并选择在VS里直接编辑该方法对应的文件。
以下是一个跟踪客户端程序的示例:
1.选择要追踪的程序类型:

因为是客户端程序,这里我们选择Standalone Application。
2.选择可执行程序路径和参数并配置追踪方式:

如上图,Application、Arguments分别对应可执行程序的路径和需要的参数。
profiling type 有三种类型:
- Tracing:它是通过获取CLR内部一个方法开始执行和结束执行的时间差来计算的分析时间。
- Line-by-line:它是通过收集代码执行的每条语句的时间来,它计算出的时间更精确。
- Sampling:它是抽样的方式,每隔一段时间(windows下大概是10ms),会暂停所有线程,并抓取堆栈里的信息,然后计算出代码执行时间差,这个选项可能会导致一些执行很短的方法抓取不到的问题。
Measure的三种类型:
- Wall time(performance counter): 它是通过Performance Counter API来收集的信息,一般操作系统和各个硬件设备都提供性能计数的API供程序调用。
- Thread time:它只支持Sampling的分析方式,它通过一个固定的线程来抓取堆栈信息计算时间,并且它只计算自己内部程序执行的时间,不管等待其他IO的时间。
- Wall time(CPU instruction):它是通过读取TSC processor register里记录的方法进入和退出时间差的方式来计算的。
根据上面的选项方式,一般我们要想完整分析自己程序的执行时间,建议可以采用Line-byline(或Tracing)和Wall time(CPU instruction)或Wall time(performance counter)的方式,因为如果用抽样和Thread time的搭配方式,会只计算自己内部时间,不能计算自己程序和外部程序交互的时间,会让自己分析性能时产生误导。
3.点击Run后会运行追踪程序

然后点击上图中的Get Snapshot就会产生程序执行的调用堆栈快照,里面就有我们最关心的执行时间。
4.下图是生成的结果:

上图中左侧红框中对应结果的五个视图:
- Overview:这个可以看到该性能分析文件的抓取方式,比如上面例子为Line-by-line,Wall Time(CPU instruction)的方式,抓取的URL地址等,还会有该视图下的系统配置情况以及当前的模块以及方法个数等信息。
- Threads Tree:记录当前每个线程执行的方法,以及方法的性能情况。
- Call Tree:不管线程,按所有请求的入口为一条数据展现,但里面展现的排序是按照执行时间高低排序的,不是按照代码顺序展现的。
- Plain List:展现所有非内核代码的方法列表,并展现每个方法执行时间和被调用次数。
- Hot Spots:它会把所有代码包括内核代码的方法,按照执行时间排序顺序展现到列表,并记录每个方法的执行时间比率和时间等信息。
上图中展示的就是Threads Tree视图,从这个视图中我们可以看到主线程以及多个托管线程的执行时间和每个方法执行的时间,这样我们就很容易定位到程序的瓶颈所在。dottrace更多的应该是应用在iis网站性能分析上,它还能进行代码调试,能够分析 .NET 框架和 Silverlight 应用程序的语句级代码覆盖。同时集成了 ReSharper 的单元测试工具集,突出显示单元测试未覆盖的代码,可以检测出覆盖任何特别代码位置的单元测试,生成基于 XML 的代码覆盖报告。
更多dottrace介绍,请猛击这里。
使用Dottrace跟踪代码执行时间的更多相关文章
- Dottrace跟踪代码执行时间
当自己程序遇到性能问题,比如请求反应缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过长,然后再分析应该怎样解决 ...
- bug__android studio 出现布局文件不提示,且点击代码不能跟踪代码
1,点击布局文件,出现 Cannot find declaration to go to ? 且 点击代码不能跟踪代码? 把 项目的build.gradle 中的 compileSdkVersi ...
- php 获取代码执行时间和消耗的内存
做一些php性能测试的时候,要获取代码执行时间和消耗的内存,查了一下资料,发现php有自带的函数可以实现这个功能,具体实现代码如下: $t1 = microtime(true);// ... 执行代码 ...
- 手机自动化测试:Appium源码分析之跟踪代码分析九
手机自动化测试:Appium源码分析之跟踪代码分析九 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家 ...
- 手机自动化测试:Appium源码分析之跟踪代码分析八
手机自动化测试:Appium源码分析之跟踪代码分析八 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家 ...
- 手机自动化测试:Appium源码分析之跟踪代码分析七
手机自动化测试:Appium源码分析之跟踪代码分析七 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest推出手机自 ...
- 手机自动化测试:Appium源码分析之跟踪代码分析六
手机自动化测试:Appium源码分析之跟踪代码分析六 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest推出手机自 ...
- 手机自动化测试:Appium源码分析之跟踪代码分析五
手机自动化测试:Appium源码分析之跟踪代码分析五 手机自动化测试是未来很重要的测试技术,作为一名测试人员应该熟练掌握,POPTEST举行手机自动化测试的课程,希望可以训练出优秀的手机测试开发工 ...
- 使用line_profiler查看api接口函数每行代码执行时间
项目情景描述: 在restful架构风格的项目交付测试的过程中,某接口出现 请求超时导致的http 502 Bad Gateway,于是开始排查具体是接口函数中的哪行代码或函数 响应时间过长导致的50 ...
随机推荐
- SSIS Error The Execute method on the task returned error code 0x80131621
Error Message: The Execute method on the task returned error code 0x80131621 (Mixed mode assembly is ...
- web页面状态
200 :表示请求成功,服务器已处理 201 :表示服务器端请求被创建, 202 :表示服务器端请求已经被接收,但未处理完成 400 :表示错误的请求 404:表示请求的资源未找到. 405:表示没有 ...
- js typeof
var message = "some thing"; alert(typeof message); // string alert(typeof 95); // number a ...
- SQL 四种基本数据操作语句的基本使用
SQL中含有四种基本的数据操作语句,分别是增(INSERT),删(DELETE),查(SELECT),改(UPDATE).下面简单介绍这四种语句的用法. 1:增(INSERT) 可分为两种查询情况,一 ...
- CSS3响应式布局之弹性盒子
CSS3弹性盒模型可以轻松的创建自适应浏览器流动窗口的布局或自适应字体大小的布局.同时该盒子决定了一个盒子在其他盒子的分布方式,及如何处理可用的空间. 自己写了一个弹性盒子的demo: 主要HTML代 ...
- php常用函数汇总
php常用函数汇总 字符串截取: 1.substr('要截取的字符串','从第几个字符开始','到第几个字符结束'); * 截取英文或者数字 ...
- 关于ifram之间的相互调用
window.iframeId.btnClose.click(); 父调子 window.parent.FatherFunciton(); 子调父
- easyui editor combobox multiple
$.extend($.fn.datagrid.defaults.editors,{ combobox: { init: function(container, options){ var combo ...
- 第三章 对象(JavaScript:语言精粹)
对象是属性的容器,其中每个属性都有名字和值. 3.0. 概览:对象字面量 | 检索 | 更新 | 引用 | 原型 | 反射 | 枚举 | 删除 | 减少全局变量污染 3.1. 对象字面量 ...
- iotop命令
简介: iotop – simple top-like I/O monitor iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息(requires ...