当自己程序遇到性能问题,比如请求反应缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过长,然后再分析应该怎样解决。

Dottrace是由JetBrainshttp://www.jetbrains.com/ 公司开发的一款产品,它分dottrace Performance和dottrace Memory 两个工具,dottrace Performance用来分析代码性能,比如函数执行时间,调用次数,消耗时间比率等,dottrace Memory一般用来分析内存占用情况。

本篇文章介绍dottrace跟踪代码执行时间来分析性能问题,因此用到的是dottrace Performance工具。它可以跟踪.net编写的:应用程序,IIS挂接的程序,windows服务,silverlight,WCF服务程序等。还可以把跟踪的文件,以快照的方式保存下来,保存为dtp后缀的文件。跟踪后的结果,如果能找到对应用户的代码信息,还可以直接查看对应的源代码,并选择在VS里直接编辑该方法对应的文件。

下图为一个分析性能调优的一个例子:

从结果可以直接看出,整个页面加载了6.140秒,其中addPNRInfo和retrievePNR两个方法一共都占用了5.92秒,然后就可以根据这两个方法进行优化了。

现在讲下左侧Views目录下的5个视图栏:

l Overview:这个可以看到该性能分析文件的抓取方式,比如上面例子为Line-by-line,Wall Time(CPU instruction)的方式,抓取的URL地址等,还会有该视图下的系统配置情况以及当前的模块以及方法个数等信息。

l Threads Tree:记录当前每个线程执行的方法,以及方法的性能情况。

l Call Tree:不管线程,按所有请求的入口为一条数据展现,但里面展现的排序是按照执行时间高低排序的,不是按照代码顺序展现的。

l Plain List:展现所有非内核代码的方法列表,并展现每个方法执行时间和被调用次数。

l Hot Spots:它会把所有代码包括内核代码的方法,按照执行时间排序顺序展现到列表,并记录每个方法的执行时间比率和时间等信息。

每次要进行性能分析,除了选择IIS还是应用程序等方式外,还要选择抓取的方式,一般的选择界面如下:

上面是选择抓取IIS Application程序后的选择界面,其中重要的是下面的Profiler options选项。

profiling type有下面三个选项:

l Tracing:它是通过获取CLR内部一个方法开始执行和结束执行的时间差来计算的分析时间。

l Line-by-line:它是通过收集代码执行的每条语句的时间来,它计算出的时间更精确。

l Sampling:它是抽样的方式,每隔一段时间(windows下大概是10ms),会暂停所有线程,并抓取堆栈里的信息,然后计算出代码执行时间差,这个选项可能会导致一些执行很短的方法抓取不到的问题。

Measure有下面三个选项:

l Wall time(performance counter): 它是通过Performance Counter API来收集的信息,一般操作系统和各个硬件设备都提供性能计数的API供程序调用。

l Thread time:它只支持Sampling的分析方式,它通过一个固定的线程来抓取堆栈信息计算时间,并且它只计算自己内部程序执行的时间,不管等待其他IO的时间。

l Wall time(CPU instruction):它是通过读取TSC processor register里记录的方法进入和退出时间差的方式来计算的。

根据上面的选项方式,一般我们要想完整分析自己程序的执行时间,建议可以采用Line-byline(或Tracing)和Wall time(CPU instruction)或Wall time(performance counter)的方式,因为如果用抽样和Thread time的搭配方式,会只计算自己内部时间,不能计算自己程序和外部程序交互的时间,会让自己分析性能时产生误导。

在开始分析IIS挂接的网站性能问题时,用工具的File->Profile…会造成IIS应用程序池重启,可能时间会比较长,因为内部会预编译和比如操作数据库,没有开启数据库连接池,会影响分析的结果,误导自己以为数据库或内核代码导致性能问题。一般应该在第一次性能分析后,重新用Start Profiling的方式来重新测试网站数据,如图:

内部会有很多内核代码和初始化的操作会影响性能分析,这里从新点击Start Profiling重新进行性能分析,它不会重启应用程序池,如图:

  

这样就减少了很多初始化的耗时操作,可以更精确的对性能进行分析了。

http://www.cnblogs.com/Lawson/archive/2011/12/18/2292045.html

Dottrace跟踪代码执行时间相关推荐

  1. 使用Dottrace跟踪代码执行时间

    当自己程序遇到性能问题,比如IIs请求反应缓慢,客户端程序执行缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过 ...

  2. stopwatch java_利用StopWatch类监控Java代码执行时间并分析性能

    springframework中的StopWatch类可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使用Sto ...

  3. 手机自动化测试:Appium源码分析之跟踪代码分析四 1

    手机自动化测试:Appium源码分析之跟踪代码分析四 控制器模块 // Appium webserver controller methods // https://github.com/hugs/a ...

  4. Google Analytics 跟踪代码安装后状态总是显示'未安装跟踪代码'

    最近要使用Google Analytics,但是在跟踪代码安装后状态总是显示'未安装跟踪代码'!如下所示:   在Google Analytics的帮助中"排查常见的跟踪设置错误" ...

  5. 精确计算代码执行时间

    在一些测试工作时我们需要获得高精度的代码执行时间以比较其效率.最近遇到一个模块其执行时间非常短,但是调用频率非常高.精确计算其运算时间对于提高程序整体效率来说非常重要. 在我刚刚接触.Net时,也曾经 ...

  6. bug__android studio 出现布局文件不提示,且点击代码不能跟踪代码

    1,点击布局文件,出现  Cannot find declaration to  go to ? 且 点击代码不能跟踪代码? 把 项目的build.gradle 中的  compileSdkVersi ...

  7. 6种快速统计代码执行时间的方法,真香!(史上最全)

    我们在日常开发中经常需要测试一些代码的执行时间,但又不想使用向 JMH(Java Microbenchmark Harness,Java 微基准测试套件)这么重的测试框架,所以本文就汇总了一些 Jav ...

  8. C# 计算代码执行时间

    很多项目在刚上线的时候使用的都是OK的,用户也体会不出来什么问题. 可当程序运行个几年,或多或少会有一些运行起来变慢甚至失败的功能. 程序逻辑是对的,这时候就要找找是不是有海量数据循环对比的问题.想找 ...

  9. python代码斜率_在Python中准确地测量代码执行时间

    测量代码执行时间是困难的.学习如何消除系统和随机测量误差,并获得更可靠的结果. 我们经常需要测量代码的特定部分执行需要多长时间.不幸的是,简单地测量函数调用之前和之后的系统时间并不是很严谨,而且容易受 ...

最新文章

  1. 如何判断模糊图像_图像翻译三部曲:pix2pix, pix2pixHD, vid2vid
  2. php关键词分词搜索 最多匹配的排在最前面_百度搜索引擎工作原理,做Seo的建议看一看 - 蜘蛛池博客...
  3. 问题 I: 成对最小公倍数(数学)
  4. ai如何做倒角和圆角_石材路沿石是如何倒角的?倒角费用是多少?路沿石质量标准?...
  5. [导入]Vista的屏幕截图小工具:Snipping Tool
  6. JAVA程序设计----练习题
  7. 常见的linux系统故障,linux常见的系统故障排除
  8. IBM V3500存储更换控制器一例
  9. 【数据结构笔记35】C实现:有序子列的归并算法:递归与非递归的实现
  10. 网络工程师的人生之路是这样的开始的!
  11. SPSS-论文常用格式-三线表
  12. html 长度太长截断,HTML CSS 表格换行禁止 超出指定长度自动截断
  13. 北风:二类电商“空手套白狼”的赚钱套路
  14. npm 安装ionic
  15. 学生端伽卡他彻底卸载
  16. 一张照片,如何生成一个二维码?
  17. 126邮箱登录(selenium+python)
  18. 机器学习分类器模型评价指标
  19. 【简●解】巴厘岛的雕塑
  20. java 大于当前日期_java判断某日期 是否超过今天

热门文章

  1. QT的QTransform类的使用
  2. SQL Server 2008 复习(三)
  3. 如何实现把固定内容自动写入excel_Excel如何把修改记录自动写入批注?
  4. netcore redis 存储集合_.net core redis的全套操作
  5. 图文了解 Kafka 的副本复制机制
  6. System.getProperty()的用途
  7. window下eclipse +cdt+cygwin做C,C++开发环境搭建 (转自:http://blog.csdn.net/thinkandchange/article/details/7935)
  8. 操作多个表_3_查询两个表共同的行
  9. 检索数据_14_返回不重复的记录
  10. python代码执行过程记录_[原创]IDAPython+OdbgScript动态获取程序执行流程