当自己程序遇到性能问题,比如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跟踪代码执行时间相关推荐

  1. Dottrace跟踪代码执行时间

    当自己程序遇到性能问题,比如请求反应缓慢,怎么分析是哪里出了问题呢?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. 【Android】图像中Drawable向Bitmap的两种转换方法
  2. 新装WINDOWS XP系统 必须安装的十大高危漏洞补丁
  3. 【Linux】8.安装tensorrt和遇到的问题及解决方法
  4. 一个Java多线程的问题,颠覆了我多年的认知!
  5. JDBC学习笔记03【JDBC事务管理、数据库连接池、JDBCTemplate】
  6. 网络边缘(接入网和物理介质)
  7. 20172327 2018-2019-1 《程序设计与数据结构》第八周学习总结
  8. java ocsp请求_java – 客户端证书上的OCSP吊销
  9. FastJson PropertyNamingStrategy 转换成JSON字符串的四种格式配置及源码解析
  10. POJ_1088 滑雪(记忆型DP+DFS)
  11. 在java中使用solrj对solr进行CRUD
  12. PyQt5-网格布局(QGridLayout)-10
  13. matlab 堆图,堆积条形图Matlab
  14. PCL中点云配准精通级实例解析
  15. 什么是后端开发?后端能做什么?全栈工程师又是什么?
  16. 使用maya.cmds加载和卸载插件
  17. Windows平台快速安装MongoDB和Robo 3T
  18. Windows 2003 变慢原因分析及解决
  19. 网络营销推广怎么做 微信如何吸引粉丝
  20. m利用SIMILINK仿真模块实现多径信道的动态仿真模拟

热门文章

  1. QT的QTextStream类的使用
  2. QT的QNetworkProxy类的使用
  3. proxmoxve打造云桌面_基于PROXMOX VE的家庭NAS搭建方案
  4. c语言将结果原模原样输出到文件,2013年9月全国计算机二级C语言程序设计上机模考试卷1.docx...
  5. Window下UDP(socket)接和收数据案例
  6. 一个ApplicationContext.xml的配置
  7. SQL基础操作_8_基础概念
  8. python最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数
  9. Windows下Caffe-SSD编译
  10. fatal error: alsa/asoundlib.h: 没有那个文件或目录错误解决办法