Visual studio 2010 的Profiler是自帶的性能工具, 利用它我們可以找出程序中的性能瓶頸,然后不斷優化不斷再測試。
Profiler有益用向導啟動程序和后期附加到程序兩種關聯被測模塊的方式,測試方式也有兩種:Sampling(采樣)和Instrumentation(檢測)。
Sampling:按設置的時間間隔中斷計算機處理器并搜集函數調用堆棧。
調用堆棧是1個動態結構,用于存儲有關正在處理器上履行的函數的信息。這個分析方法構成的結果就是各個函數在運行時被采樣的次數,次數越大代表開消越大。由于對被測源碼不需要更改,所以直接啟動或后期附加到被測程序都可以。
Instrumentation:在被測源碼文件中目標函數的開始和結尾和這些函數對其他函數的每次調用前后插入代碼。
插入的代碼記錄了以下信息:
根據”ToolsOptionsPerformance Tools“ 下‘Show time values as:’的默許設置為Milliseconds,我覺得采樣周期應當是毫秒級,也就是說報告中采樣次數可以約等于毫秒。
通過‘AnalyzeLaunch Performance Wizard…’ 或‘AnalyzeProfilerAttach or Detach…’對被測程序進行新建Performance Session(性能會話), 我們主要介紹下Sampling通過Attach To Process的情況下報告的分析。
Profiler開始后,類似:
當你覺得已搜集了足夠的信息可以停止后, 點擊‘Stop profiling’, 類似:
上述界面就是報告的Summary, 我們開始分析程序的性能瓶頸。
‘Hot Path’指的就是采樣次數高的,也就是性能瓶頸的函數。
‘Inclusive Samples’指的是該函數整體被采樣的次數,說白了,就是函數本身和它所調用的所有子函數的總共開消大小。
‘Exclusive Samples’指的是該函數本身被采樣的次數,說白了,也就是函數自己的開消大小,不包括它所調用的子函數的開始。
通過上述幾個介紹,我們就能夠從圖中得到性能瓶頸的函數, 然后根據Call Tree可以得到完全的調用上下文。
例如,在Summary界面中點擊CallTree,依照‘Inclusive Samples’排序,依照開消大小展開方法,終究就能夠得到開消大的函數上下文, 類似:
固然,我們也能夠通過上面的過濾條件選擇”Modules“、”Threads“等方式來找到自己關心的瓶頸。
另外, 我們還可以在Summary界面選擇‘Show Just My Code’和適當的CPU時間段來過濾。
參考:Analyzing Application Performance by Using Profiling Tools