標籤:
使用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效能瓶頸