標籤:profiler 自我心的 debug performance
Visual studio 2010 的Profiler是內建的效能工具, 利用它我們可以找出程式中的效能瓶頸,然後不斷最佳化不斷再測試。
簡介
Profiler有利用嚮導啟動程式和後期附加到程式兩種關聯被測模組的方式,測試方式也有兩種:Sampling(採樣)和Instrumentation(檢測)。
Sampling:按設定的時間間隔中斷電腦處理器並收集合函式呼叫堆疊。
呼叫堆疊是一個動態結構,用於儲存有關正在處理器上執行的函數的資訊。這個分析方法形成的結果就是各個函數在運行時被採樣的次數,次數越大代表開銷越大。因為對被測源碼不需要更改,所以直接啟動或者後期附加到被測程式都可以。
Instrumentation:在被測源碼檔案中目標函數的開始和結尾以及這些函數對其他函數的每次調用前後插入代碼。
插入的代碼記錄了以下資訊:
- 此收集事件與上一收集事件之間的間隔。
- 在此間隔內作業系統是否執行了操作。
例如,作業系統可能讀寫磁碟,或者在目標線程與另一個進程中的另一個線程之間進行切換。
根據”Tools\Options\Performance Tools\“ 下‘Show time values as:’的預設設定為Milliseconds,我覺得採樣周期應該是毫秒級,也就是說報告中採樣次數可以約等於毫秒。
使用
- 用管理員啟動Visual Studio
- 針對Release版本的程式
- 設定好程式所需的pdb路徑
通過‘Analyze\Launch Performance Wizard…’ 或者‘Analyze\Profiler\Attach or Detach…’對被測程式進行建立Performance Session(效能會話), 我們主要介紹下Sampling通過Attach To Process的情況下報告的分析。
Profiler開始後,類似:
當你覺得已經收集了足夠的資訊可以停止後, 點擊‘Stop profiling’, 類似:
上述介面就是報告的Summary, 我們開始剖析器的效能瓶頸。
‘Hot Path’指的就是採樣次數高的,也就是效能瓶頸的函數。
‘Inclusive Samples’指的是該函數整體被採樣的次數,說白了,就是函數本身以及它所調用的所有子函數的總共開銷大小。
‘Exclusive Samples’指的是該函數本身被採樣的次數,說白了,也就是函數自己的開銷大小,不包含它所調用的子函數的開始。
- ‘Funcions Doding Most Individual Work’指的是開銷最大的單個函數,因此它的指標是用‘Exclusive
Samples’來表示。
通過上述幾個介紹,我們就可以得到效能瓶頸的函數, 然後根據Call Tree可以得到完整的調用上下文。
例如,在Summary介面中點擊CallTree,按照‘Inclusive Samples’排序,按照開銷大小展開方法,最終就可以得到開銷大的函數上下文, 類似:
當然,我們也可以通過上面的過濾條件選擇”Modules“、”Threads“等方式來找到自己關心的瓶頸。
另外, 我們還可以在Summary介面選擇‘Show Just My Code’和適當的CPU時間段來過濾。
參考:Analyzing Application Performance by Using Profiling Tools
Visual Studio 2010中的Profiler使用