標籤:blog http io os ar 使用 for strong sp
使用Visual Studio 尋找App效能瓶頸
最後更新日期:2014-05-05
閱讀前提:
環境:Windows 8.1 64bit英文版,Visual Studio 2013 專業版Update1英文版
本文
如果在應用程式的開發過程中,從頭到尾顧及效能最佳化,開發效率會很低,所以我們需要藉助profiler工具分析現有代碼,效能的瓶頸在哪裡? 然後針對熱點進行最佳化,這樣可以提高產品的投入產出比,Visual Studio 2013專業版的profile工具有四個功能,普通的C++程式只使用了[CPU Sampling]和[Instrument]兩個功能,其中[CPU Sampling]是分析C++程式效能的推薦選項。
以需要幾秒鐘才能運行完畢的C++語言Windows控制台項目為例,選擇,主菜單[Analyze]->[Performance and Diagnostics]開啟[PerformanceWizard]視窗,有四個選項,選擇CPU Sampling(推薦),測量函數的調用時間,這個wizard有三步,最後點擊[Finish]就啟動profiling直到程式執行結束,profile工具產生Sample Profiling Report。
Hot Path欄目中,
ElapsedInclusive Time,函數佔用的時間
Elapsed Exclusive Time,是inclusive time減去子函數的已耗用時間
如果你要知道各個函數的詳細調用次數可以在[Performance Wizard]中選擇[Instrumentation],因為它要在每個函數前後插入測量代碼所以運行程式和分析報告的時間長很多, 結束後會產生Instrumentation Profiling Report,相對於Sample ProfilingReport只是多了函數調用次數的資訊,所以不推薦。
如何找到最花時間的函數?
Summary視圖中,FunctionsWith Most Individual Work欄列出最耗時的五個函數,直接點擊列表中的函數名稱,切換到[Function Details]View,下面是initSample函數[FunctionDetails]視圖的截屏:
三個圖塊分別代表[1]調用者[2]當前函數[3]被調用者,深藍色背景上面顯示包括子函數調用所佔時間百分比(Inclusive Time),淡藍色顯示函數體(不包括子函數)本身所佔時間百分比(Exclusive Time)。點擊下面的[Caller/Callee]可以轉到[Caller/Callee]視圖,通過調用者和被調用者列表,看到各個函數的調用次數,花的時間百分比。
你可以切換到[Functions]視圖看到所有函數,讓這些函數按照所耗時間多少排序,尋找你要的最耗時函數。
根據名字尋找指定函數
切換到Functions(或Modules)視圖,[Ctrl]+[F]快速鍵彈出尋找視窗輸入要找的函數名稱,指定尋找範圍為[Current Document],按[Enter]找到函數後,雙擊函數名稱就可以切換到這個函數的[Function Details]視圖。要尋找某個模組的函數,最好是在[Modules]視圖下,在這個視圖下方便尋找某個Modules下的函數。
根據調用次數尋找指定函數
[Functions]視圖中,可以點擊某個列名,函數列表會按照這個列的屬性的大小值排序,找到要的函數後雙擊就可以切換到這個函數的[Function Details]視圖了。
根據函數調用順序尋找
如何你知道熱點大致的位置,切換到[Call Tree]視圖,找到根節點後,按右鍵快顯功能表選擇[Set Root],這樣就可以不用看其它分支,如果要重設根節點,快顯功能表中選擇[Reset Root]就可以了。
根據Number ofCalls(調用次數)和Elapsed Tiime(時間開銷)一步步展開節點,直到要修改的函數,右鍵快顯功能表選擇[View Source]可以轉到具體的原始碼,[Show Function Details]切換到當前函數的[FunctionDetails]視圖後,藍色框的右上方顯示的是當前函數總的時間(Inclusive Time)開銷占的百分比,藍色框可以左鍵單擊切換到指定函數的[Function Details]視圖,點擊三個框下面的Caller/Callee可以看到更詳細的調用者,被調用者資訊。
如何分析已耗用時間很長的程式
profile啟動並執行時候,可以選擇[StopProfiling],結束分析後產生Instrumentation(或Sampling) Profiling Report,預設出現Summary視圖。
參考Summary視圖, 在曲線圖上標記出要分析的時間段,右鍵快顯功能表,單擊[Filter Profiling Data by Selection]項即可。
參考資料
《Find Application Bottlenecks with Visual Studio Profiler》
http://msdn.microsoft.com/en-us/magazine/cc337887.aspx
使用Visual Studio 尋找App效能瓶頸