使用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介绍,请猛击这里

时间: 2024-08-29 19:44:09

使用Dottrace跟踪代码执行时间的相关文章

Dottrace跟踪代码执行时间

使用Dottrace跟踪代码执行时间 当自己程序遇到性能问题,比如IIs请求反应缓慢,客户端程序执行缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过长,然后再分析应该怎样解决. Dottrace是由JetBrainshttp://www.jetbrains.com/ 公司开发的一款产品,它分dottrace Performance和dottrace Memory 两个工具,dottrace Performa

统计代码执行时间,使用Stopwatch和UserProcessorTime的区别

当我们需要统计一段代码的执行时间,首先想到的可能是Stopwatch类.在这里,先暂不使用Stopwatch,自定义一个统计代码执行时间的类,大致需要考虑到: 1.确保统计的是当前进程.当前线程中代码的执行时间.2.在统计执行过程中,不允许有垃圾回收.即在统计代码执行时间之前,就让GC完成垃圾回收. 举例:统计显示一个数组元素所消耗的时间 class Program { static void Main(string[] args) { int[] arrs = new int[10000];

wp8 入门到精通 测量代码执行时间

Stopwatch time = new Stopwatch(); byte[] target = new byte[size]; for (int j = 0; j < size; j++) target[j] = unchecked((byte)j); //Otherwise parts of the array are optimised out. CCMD5Core.GetHash(target); time.Start(); for (int i = 1; i <= iteratio

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

1,点击布局文件,出现  Cannot find declaration to  go to ? 且 点击代码不能跟踪代码? 把 项目的build.gradle 中的  compileSdkVersion 23  版本设置最高. apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId &q

关于javascript代码执行时间的计算

最近看了<高性能Javascript>一书,发现了几个计算代码执行时间的方法,感觉还挺有用的. 以前我们要计算程序,函数的执行之间,通常是在代码执行前后加入时间戳,两者的差值即为执行时间,如下: var count=1000; var begin=new Date(); for(var i=0;i<count;i++){ document.createElement("div"); } var end=new Date(); var time=end-begin; c

Google Analytics 跟踪代码安装后状态总是显示&#39;未安装跟踪代码&#39;

最近要使用Google Analytics,但是在跟踪代码安装后状态总是显示'未安装跟踪代码'!如下所示:   在Google Analytics的帮助中“排查常见的跟踪设置错误”文章中找到了解决方法,拷贝适合多余空格导致. 附: 排查常见的跟踪设置错误 正确安装跟踪代码段后,最长需要 24 小时才能在帐户中看到数据.如果安装 24 小时后仍未看到任何数据,请查看下列可能的原因: 使用的代码段不正确和/或您查看了错误的帐户或视图如果您在跟踪多个网站和/或可以访问多个 Google Analyti

c# 计算代码执行时间

System.Diagnostics.Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 // you code .... stopwatch.Stop(); // 停止监视 TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间 double hours = timespan.TotalHours; // 总小时 double minutes =

linux下统计代码执行时间

转载自:http://velep.com/archives/973.html 统计函数或某一段代码的运行时间在软件开发中常常遇到.透过运行时间可分析出函数或程序段的运行效率和性能,从而有针对性的对代码进行优化. 在unix环境中,常常用binutils(GNU二进制工具集)中的gprof工具来查看函数运行时间.但本文的重点是自己编写代码实现函数或程序段运行时间的统计.下面进行详细描述. 实现原理 实现原理很简单,在函数或程序段开始运行前,记录开始时间.运行完成后,记录结束时间.把结束时间与开始时

unity中检测代码执行时间

使用unity编写代码的大多数使用的都是c#,c#中可以使用特定的语句来对代码的执行效率进行检测. 检测代码如下: using UnityEngine; using System.Collections; public class Test: MonoBehaviour { void Update() { if (Input.GetKeyDown(KeyCode.G)) { TestExeTime(); } } void TestExeTime() { System.Diagnostics.St