《編程珠璣(續)》第一章中就介紹了性能監視工具,對於較簡單的程序來說,性能監視工具其實可以用變量累加來計算的,但是對於較復雜的程序來說就需要比較好的性能監視工具了。而VS2010提供了一個性能監視工具,雖然我沒有寫過大型的程序,但是感覺還是很高大上的!
性能監視工具的打開:Analyze->Launch Performace Wizard,選擇CPU Simpling,對於可執行程序來說,選擇An executable(.EXE file)。輸入完整的.exe文件路徑,然后點擊Finish即可。
需要注意的是這個分析表時由CPU采樣得到的,這樣你的程序如果執行特別快,還沒有來得及采樣就結束了,那么就不能得到這個分析報告了,因此,如果執行時間過短時,需要循環執行多次來分析程序的性能指標。
性能會話 可使用“性能探查器”創建性能會話,會話中包含配置數據,用於收集性能信息以及一次或多次分析運行的結果。 創建性能會話之后,“性能資源管理器”窗口中將顯示該會話。

-
分析會話的名稱。
-
Targets 文件夾顯示在會話中分析的項目或二進制文件。
-
Reports 文件夾包含一次或多次收集運行的分析數據文件。 您可以單擊某個文件名,並選擇性能信息(如函數調用、內存分配以及特定函數的詳細信息)的視圖。 每個視圖都顯示在 Visual Studio 主窗口中。
采樣方法 “采樣”是一種統計分析方法,用於顯示執行應用程序中大多數用戶模式工作的函數。 若要加快應用程序的運行速度,可先從采樣這一塊下手。
“采樣”方法將按指定時間間隔收集在應用程序中執行的函數的相關信息。 完成分析運行后,Visual Studio 主窗口中將顯示分析數據的“摘要”視圖。 “摘要”視圖將顯示最活躍函數的調用樹(稱為“熱路徑”,在其中執行了應用程序中的大多數工作),此外,還將列出執行單個工作最多的函數,並提供一個可用於重點顯示采樣會話特定段的時間線圖。
開始分析之前,可執行以下操作,以確保不會遇到不必要的問題。
以管理員身份運行 如果您不是所用計算機上的管理員,則應以管理員身份運行 Visual Studio,以確保具有使用分析工具中的某些功能所必須具有的權限。 為實現此目的,請單擊“開始”按鈕,找到 Visual Studio 應用程序圖標,右擊該圖標,然后單擊“以管理員身份運行”。
將活動生成配置設置為“發布” 調試版本會向應用程序中插入附加診斷代碼,但它不包括編譯器在發布版本中執行的優化。 分析應用程序的發布版本可以提供有關應用程序性能的更准確的數據。 若要更改活動配置,請在“生成”菜單上單擊“配置管理器”,然后在該對話框中的活動解決方案配置下選擇“發布”。
獲取 Windows 符號文件 如果分析調用 Windows 函數的代碼,應確保具有最新的 .pdb 文件。 如果沒有這些文件,報告視圖中列出的 Windows 函數名稱會比較晦澀難懂。 有關如何確保具有所需文件的更多信息,請參見如何:引用 Windows 符號信息。
若要獲取需要分析的數據,必須先創建性能會話,然后運行該會話。 利用“性能向導”可執行這兩項操作。
創建並運行性能會話
-
在 Visual Studio 中打開解決方案。
-
在“分析”菜單上,單擊“啟動性能向導”。
-
接受“CPU 采樣(建議)”的默認設置,然后單擊“下一步”。
-
接受默認項目,然后單擊“下一步”。
-
請確保選中了“在向導完成后啟動分析”復選框,然后單擊“完成”。
此時將啟動應用程序,探查器開始收集數據。
-
練習可能包含性能問題的功能。
-
采用通常的做法關閉應用程序。
應用程序運行完成后,Visual Studio 主窗口中將顯示分析數據的“摘要”視圖,“性能資源管理器”窗口中將顯示新會話的圖標。
運行完性能會話后,Visual Studio 主窗口中將顯示分析報告的“摘要”視圖。
建議在數據分析的開始階段,使用“摘要時間線”依次檢查“熱路徑”、執行最多工作的函數的列表,最后集中檢查其他函數。 您還可以在“錯誤列表”窗口中查看分析建議和警告。
請注意,采樣方法可能無法提供您所需的信息。 舉例來說,只有當應用程序執行用戶模式代碼時才會收集樣本。 因此,某些功能(如輸入和輸出操作)不會被采樣捕獲。 分析工具提供了多種收集方法,可使您重點收集重要的數據。 有關其他方法的更多信息,請參見如何:選擇收集方法。
圖中每個帶編號的區域都與過程中的某個步驟相關。

分析采樣數據
-
在“摘要”視圖中,“熱路徑”顯示應用程序調用樹中具有最高非獨占樣本的分支。 它是收集數據時最活躍的執行路徑。 高非獨占值可表示可以優化生成調用樹的算法。 查找位於路徑最低級別的代碼中的函數。 注意,路徑也可以包含系統函數或外部模塊中的函數。
-
“非獨占樣本數”指示該函數及其調用的任何函數所執行的工作量。 高非獨占計數指向整體消耗資源最多的函數。
-
“獨占樣本數”指示函數體中的代碼執行的工作量(不包括該函數調用的函數所執行的工作量)。 高獨占計數可能表示函數本身存在性能瓶頸。
-
-
單擊函數名稱可顯示分析數據的“函數詳細信息”視圖。 “函數詳細信息”視圖以圖形方式呈現所選函數的分析數據,並顯示調用該函數的所有函數以及所選函數調用的所有函數。
-
調用函數和被調用函數的塊的大小表示函數調用或被調用的相對頻率。
-
單擊調用函數或被調用函數的名稱可使其成為“函數詳細信息”視圖中的所選函數。
-
“函數詳細信息”窗口的下半部分窗格顯示函數代碼本身。 如果檢查代碼時發現可以優化其性能,請單擊源文件的名稱,以在 Visual Studio 編輯器中打開該文件。
-
-
若要繼續進行分析,請從“視圖”下拉列表中選擇“摘要”以返回“摘要”視圖。 然后檢查“執行單個工作最多的函數”中的函數。 此列表顯示具有最高獨占樣本的函數。 這些函數的函數體中的代碼執行了大量工作,並且您可以對它進行優化。 若要進一步分析某個特定函數,請單擊函數名稱以在“函數詳細信息”視圖中顯示該函數。
若要繼續研究分析運行,可以通過使用“摘要”視圖中的時間線顯示某段分析數據中的“熱路徑”和“執行單個工作最多的函數”,以重新分析所選段。 例如,如果重點顯示時間線中某個較小的峰值,則可能會顯示耗費大量資源的調用樹和函數,這些調用樹和函數未在整個分析運行的分析中顯示。
若要重新分析某段,請在“摘要時間線”框中選擇該段,然后單擊“按選定內容篩選”。
-
探查器還使用一組規則來建議改進分析運行的方法,並標識可能的性能問題。 如果發現了問題,則會在“錯誤列表”窗口中顯示警告。 若要打開“錯誤列表”窗口,請在“視圖”菜單上單擊“錯誤列表”。
-
若要查看引發了警告的函數,則在“函數詳細信息”視圖中雙擊該警告。
-
若要查看有關該警告的詳細信息,則右擊該錯誤,然后單擊“顯示錯誤幫助”。
-
找到並優化一個或多個函數后,可以重復分析運行,並比較數據以了解所做更改對應用程序性能的影響。
修改代碼並重新運行探查器
-
更改代碼。
-
若要打開“性能資源管理器”,請在“視圖”菜單上單擊“其他窗口”,然后單擊“性能資源管理器”。
-
在“性能資源管理器”中,右擊要重新運行的會話,然后單擊“啟動並啟用分析功能”。
-
在重新運行會話之后,將向“性能資源管理器”中該會話的“Reports”文件夾添加另一個數據文件。 同時選擇原始分析數據和新分析數據,右擊所選內容,然后單擊“比較性能報告”。
此時將打開一個新的報告窗口,其中顯示比較的結果。 有關如何使用比較視圖的更多信息,請參見如何:比較探查器數據文件。