1.简介
JetBrains 全家桶中的 dotTrace 和 dotMemery 可以用来分析.net 程序的CPU使用分布和内存使用分布.dotTrace可以统计在一系列操作后,各个函数用时占比、函数名、耗时、调用次数.
2.安装
安装选择官方安装程序: 官网地址
3.使用
3.1 dotTrace 分析选项
分析选项有四种,如下:
- Sampling:通过获取CLR内部一个方法开始执行和结束执行的时间差来计算的分析时间最快的方法。它用于精确测量程序运行时间,但可能会丢失一些数据。使用此配置类型可使你快速获取应用程序的的总体性能
- Tracing:围绕函数输入和退出。慢于Sampling的方法,但是可以准确地测量特定方法被调用的准确次数。它是通过获取CLR内部一个方法开始执行和结束执行的时间差来计算的分析时间
- Line-by-line:通过收集代码执行的每条语句的时间来,它计算出的时间更精确。通过收集代码执行的每条语句的时间来,它计算出的时间更精确。该方法适用于你已经知道大概哪里出现,并要找到具体某一个出现性能问题的方法时
- Timeline:抽样的方式,每隔一段时间(windows下大概是10ms),会暂停所有线程,并抓取堆栈里的信息,然后计算出代码执行时间差,这个选项可能会导致一些执行很短的方法抓取不到的问题
3.2 dotTrace 分析方式选择
dotTrace界面如下:
图1. dotTrace主界面
左侧有三种方式接入被分析程序:
1. Attach to Running App.
能使用的分析选项: Sampling 和 Timeline
2. Profile Local App.
能使用的分析选项: Sampling,Tracing,Line-by-line和Timeline.
3. Profile Remote App.
Sampling的分析结果中总是出现 [Native or optimized code]项,只有总耗时,没有各个函数的耗时细节。
图2 Native or optimized code
在此情况下需要选用Tracing进行分析。接入方式上选择 Profile Local App。
图3 接入被分析程序步骤
点击Run之后,出现监控界面:
图4 监控与控制界面
点击 Start 按钮开始记录数据[首次打开自动Start], 点击 Get Snapshot and Wait 按钮结束记录,并生成一个快照。快照按照勾选项会自动打开,或者在图1界面左侧的 Snapshots 中找到生成的快照。
## 3.3快照分析
### 3.3.1树状分析
打开快照后,界面如下:
图5 快照树状分析
左侧有四个标签页,分别通过四种不同的角度分析快照:
* Call Tree:会显示在所有线程中的所有被调用的方法。使用此视图可快速获取到应用程序实际进行的活动,展示了所有线程中的所有函数调用信息。每个根节点代表由一个线程执行一个根函数。每个节点对应一个函数的调用和它对应的性能分析信息
* Plain List:显示了一个简单的方法列表。让您彻底分析一个特定的方法
* Hot Spots:这个视图只将执行时间最长的方法进行列表显示。使用Hot Spots,你只需一眼就可找到执行时间最长的方法
* Source View:用于展示源码的视图。请注意,无论何时您选择了一个方法, Performance Viewer会向您显示该方法的实际代码。如果没有源代码可用,Performance Viewer将尝试对程序进行反向编译,生成源码
选中某一行后,右侧会显示出函数对应的源代码。
3.3.2 快照对比
在 File 页签选择 Compare Snapshots 可以对比两次不用的快照之间的差异.
图 6 快照对比
### 3.3.3 Overview
打开上面的 View 页签,选择 SnapShot Overview 可以看到快照总览.
图7 总览
图8 总览
4.配套
需要配套机器人对程序进行压力注入,然后使用 dotTrace 对 C# 程序进行快照分析.找出性能瓶颈