dotTrace快速帮助你定位C#代码的性能瓶颈

dotTrace

1.     问题描述

IIS发布的接口运行一段时间后变的很慢,重启IIS连接池后问题得到解决,但是运行一段时间后再次出现变慢的问题

2.     问题原因

程序中有读取xml文件的逻辑,现网请求多的时候 ,读取xml消耗时间很多,造成连接超时,IIS的连接得不到及时释放

3.       定位方法

优化内部逻辑解决该问题。在测试环境下进行压力测试,并使用dotTrace进行跟踪,具体步骤。

第一步。接口进行压力测试,运行dotTrace,选择profile---IIS Application(因为是IIS应用)

第二步。选择需要的profiler options(此处选择的是Tracing),点击Run

第三步。先在命令行中通过iisapp查看需要定位的IIS应用的PID,再选择对应的PID参数,点击Get Snapshot获取快照就可以了。

第四步。对快照进行分析。

4.       dotTrace

Dottrace是由JetBrainshttp://www.jetbrains.com/ 公司开发的一款产品,它分dottrace Performance和dottrace Memory 两个工具,dottrace Performance用来分析代码性能,比如函数执行时间,调用次数,消耗时间比率等,dottrace Memory一般用来分析内存占用情况。dottrace可以跟踪.net编写的:应用程序,IIS挂接的程序,windows服务,silverlight,WCF服务程序等。还可以把跟踪的文件,以快照的方式保存下来,保存为dtp后缀的文件。跟踪后的结果,如果能找到对应用户的代码信息,还可以直接查看对应的源代码,并选择在VS里直接编辑该方法对应的文件。

profiling type 有三种类型:

  • Tracing:它是通过获取CLR内部一个方法开始执行和结束执行的时间差来计算的分析时间。
  • Line-by-line:它是通过收集代码执行的每条语句的时间来,它计算出的时间更精确。
  • Sampling:它是抽样的方式,每隔一段时间(windows下大概是10ms),会暂停所有线程,并抓取堆栈里的信息,然后计算出代码执行时间差,这个选项可能会导致一些执行很短的方法抓取不到的问题。
  • Wall time(performance counter): 它是通过Performance Counter API来收集的信息,一般操作系统和各个硬件设备都提供性能计数的API供程序调用。
  • Thread time:它只支持Sampling的分析方式,它通过一个固定的线程来抓取堆栈信息计算时间,并且它只计算自己内部程序执行的时间,不管等待其他IO的时间。
  • Wall time(CPU instruction):它是通过读取TSC processor register里记录的方法进入和退出时间差的方式来计算的。

Measure的三种类型:

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

View介绍:

  • Overview:这个可以看到该性能分析文件的抓取方式,比如上面例子为Tracing,Wall Time(CPU instruction)的方式,抓取的URL地址等,还会有该视图下的系统配置情况以及当前的模块以及方法个数等信息。
  • Threads Tree:记录当前每个线程执行的方法,以及方法的性能情况。
  • Call Tree:不管线程,按所有请求的入口为一条数据展现,但里面展现的排序是按照执行时间高低排序的,不是按照代码顺序展现的。
  • Plain List:展现所有非内核代码的方法列表,并展现每个方法执行时间和被调用次数。
  • Hot Spots:它会把所有代码包括内核代码的方法,按照执行时间排序顺序展现到列表,并记录每个方法的执行时间比率和时间等信息。

通过监控的图我们可以较为快速的定位代码中的性能瓶颈

5.       参考资料

http://www.cnblogs.com/xienb/p/3313153.html

时间: 2024-11-09 05:19:58

dotTrace快速帮助你定位C#代码的性能瓶颈的相关文章

Resharper的配置(习惯使用了VS的F6编译和F12(快速非resharper查询编译代码)转到定义的默认设置)【设置了好多次resharper的使用了,特此记下简单的思路】

1:如何设置vs默认的快捷键方式: 2:重新设置resharper的F12及其其它选项设置: 3:通过以上两步,就可以使用默认的vs快捷方式和resharper的常用功能设置了. Resharper的配置(习惯使用了VS的F6编译和F12(快速非resharper查询编译代码)转到定义的默认设置)[设置了好多次resharper的使用了,特此记下简单的思路],布布扣,bubuko.com

Xcode7的发布后的crash跟踪,轻松定位崩溃代码 Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS

Xcode7中苹果为我们增加了两个重要的debug相关功能.了解之后觉得非常实用,介绍给大家. 1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS? EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误.苹果这次带来了革命性的提升. 在项目的Scheme中Diagnostics下,选中enable address sanitizer(注意选中后Xcode会重新编译整个项目). 这样设置后,如果再出现类

xocde快速定位崩溃代码

起因 有不少人在评论发一些崩溃信息,问我程序怎么回事,其实如果你知道了程序崩溃在哪行代码崩溃了,就很容易定位问题了.android开发看崩溃log就能看到具体哪行代码出问题,那在iOS开发怎么快速定位到具体哪行代码崩溃呢. 步骤1 在xcode添加一个通用断点就行了.方法如下: 点击项目导航断点那,如图 步骤2 点击+号: 一步步按上面图完成操作. 再运行程序 自动就断点到这里来了, log信息是: [html] view plaincopy 2013-05-20 11:14:19.635 Ge

JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码

本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍),并准确定位系统瓶颈:我们应用里静态对象不是太多.有大量的业务线程在频繁创建一些生命周期很长的临时对象,代码里有问题.那么问题来了,如何在海量业务代码里边准确定位这些性能代码?本文将介绍如何使用阿里开源工具 TProfiler 来定位这些性能代码,成功解决掉了 GC 过于频繁的性能瓶颈,并最终在上次优化的基础

使用代码生成器“代码工厂”快速生成B/S程序代码

开发目的: 自动生成C#.HTML.JS.Ajax 代码 .可以节省大量的时间来做业务逻辑的代码,那些重复的代码就不需要....了 环境支持: 硬件环境:window .VS2010+.支持SQLServer最低版本2000 架构:基于BS架构 Server服务端(专门生成代码的):www.10086bank.com 平台下面的“代码工厂”: client客户端: 免费下载.... http://pan.baidu.com/s/1hqtGGlA 怎样使用: 使用方法请看:http://www.c

快速生成折线图及代码详解

快速生成折线图时,只需要修改代码中的以下数据: 1.Y轴刻度个数:Ycounts 2.Y轴最小刻度数:YminValue 3.横坐标:数组mouth 4.标题:strTopic 5.用户数据:数组d 6.[可选]修改背景色:代码中27行改为所需要的颜色即可 完整代码: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using Sys

快速书写常见的 Kotlin 代码

这篇文章主要是写给需要快速上手 Kotlin 的 Java 程序员看的,这时候他们关注的是如何使用 Kotlin 写出类似某些 Java 的写法,所以本文基本不涉及 Kotlin 的高级特性. 1. 如何定义变量 Java 定义变量的写法: String string = "Hello"; 1 String string = "Hello"; 基本等价的 Kotlin 定义变量的写法: var string: String = "Hello" 1

如何快速熟悉新项目的代码?

以下,根据V2EX讨论整理. 熟悉业务,走通流程,把业务分块,知道项目主要是干什么的 走到程序入口,一步步来看 代码级别记得走一遍调试的流程,看看是怎么走得,加log,哪里不会加哪里 在其中修改些小bug,增加些小功能,修改大一些的bug,增加大功能 其中可以画流程图理清业务,debug一些核心模块, 从包名可以获取一些信息,从超类分析 慢慢构建UML图和思维导图,不断回顾,总结 继承核心类,尝试修改逻辑 在写得过程中,总结写一下文档. 不到必要时候,不直接修改代码,做好备份. 写文档的时候,

Andoid 利用ndk-stack定位崩溃代码

Android NDK自从版本R6开始, 提供了一个工具ndk-stack( 在目录{ndk_root}/中 ). 这个工具能自动分析dump下来的crash log, 将崩溃时的调用内存地址和c++代码一行一行对应起来. 执行命令ndk-stack --help Usage: ndk-stack -sym <path> [-dump <path>] -sym Contains full path to the root directory for symbols. -dump C