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# 程序進行快照分析.找出性能瓶頸