使用與偵錯工具整合的 CPU 使用量 診斷工具來偵測效能問題。 您也可以分析 CPU 使用量,而不附加調試程式,或以執行中的應用程式為目標。 如需詳細資訊,請參閱 在發行或偵錯組建上執行分析工具 和 使用 CPU 分析分析效能。
當調試程序暫停時,[診斷工具] 視窗中 CPU 使用量 工具會收集應用程式中執行之函式的相關信息。 此工具會列出正在執行工作的函式,並提供時間軸圖表,讓您可用來將焦點放在取樣會話的特定區段。
重要
Visual Studio 對於 .NET 開發中的除錯器整合診斷工具提供支援,包括 ASP.NET、ASP.NET Core,以及原生/C++ 開發。 需要對應的Visual Studio 工作負載。 需要 Windows 8 和更新版本,才能使用調試程式執行分析工具(診斷工具 視窗)。
在本教學課程中,您將:
- 收集 CPU 使用率數據
- 分析 CPU 使用率數據
開啟您想要在 Visual Studio 中偵錯的專案,並在您想要檢查 CPU 使用量的點,在應用程式中設定斷點。
在您要分析之函式或程式代碼區域的結尾設定第二個斷點。
藉由設定兩個斷點,您可以將數據收集限制為您想要分析的程式代碼部分。
除非您已關閉診斷工具,否則 診斷工具 視窗會自動顯示。 若要再次顯示視窗,請按下 [偵錯]>Windows>[顯示診斷工具]。
您可以選擇使用工具列上的 [選取工具] 設定,選擇 CPU 使用量、記憶體使用量或兩者。 如果您執行 Visual Studio Enterprise,您也可以在 Tools>Options>IntelliTrace中啟用或停用 IntelliTrace。
我們主要會查看 CPU 使用率,因此請確定已啟用 CPU 使用量(預設為啟用)。
按一下 [偵錯]>[開始偵錯](或按工具列上的 [開始],或按 F5)。
當應用程式完成載入時,[診斷工具] 的 [摘要] 檢視隨即出現。 如果您需要開啟視窗,請按下 [偵錯]>Windows>[顯示診斷工具]。
如需事件的詳細資訊,請參閱 搜尋和篩選 [診斷工具] 視窗的 [事件] 索引標籤,。
執行會觸發第一個斷點的場景。
當調試程序暫停時,請啟用 CPU 使用量數據的集合,然後開啟 [CPU 使用量] 索引標籤。
當您選擇 [記錄 CPU 配置檔時,Visual Studio 會開始錄製您的函式,以及執行所花費的時間。 當應用程式在斷點停止時,您只能檢視此收集的數據。
按 F5 以將應用程式執行到您的第二個斷點。
現在,您現在有應用程式效能數據,特別是兩個斷點之間執行的程式代碼區域。
分析工具會開始準備線程數據。 等候它完成。
[CPU 使用量] 工具會於 [CPU 使用量] 分頁標籤中顯示報告。
如果您想要選取要分析的程式代碼更特定區域,請在 CPU 時間軸中選取區域(它必須是顯示分析資料的區域)。
此時,您可以開始分析數據。 如果您無法收集或顯示數據,請參閱 針對分析錯誤進行疑難解答,並修正的問題。
提示
嘗試識別效能問題時,請進行多個測試。 效能的表現通常因多次執行而有所差異,程式碼路徑在第一次執行時速度會較慢,因為需要進行一次性初始化作業,例如載入 DLL、JIT 編譯方法和初始化快取。 藉由採用多個度量,您可以進一步瞭解所顯示計量的範圍和中位數,這可讓您比較第一次與程式代碼區域的穩定狀態效能。
建議您先檢查 CPU 使用量下的函式清單、識別執行最多工作的函式,然後仔細查看每個函式,以開始分析數據。
在函式清單中,檢查執行最多工作的函式。
提示
函式會按照次序列出,從執行最多工作的函式開始(該次序不是按呼叫順序排列)。 這可協助您快速識別執行時間最長的函式。
在函式清單中,按兩下其中一個正在執行大量工作的應用程式函式。
當您按兩下函式時,Functions 檢視會在左窗格中開啟。 從下拉功能表中選取 [來電者/被呼叫者 檢視]。
在此檢視中,選取的函式會顯示在標題和 [目前函式] 方塊中(DoWork,在此範例中)。 呼叫目前函式的函式會顯示在左側 呼叫函式,而目前函式所呼叫的任何函式都會顯示在右側的 [呼叫函式] 方塊中。 (您可以選取任一方塊來變更目前的函式。
此檢視會顯示函式完成的整體應用程式運行時間總計(毫秒)和百分比。
函式主體 也會顯示在函式主體中花費的總時間量(以及佔用的時間百分比),不包括在呼叫或被呼叫函式中花費的時間。
雙擊函式時,呼叫者/被呼叫者 檢視會在左窗格中開啟。
在此檢視中,選取的函式會顯示在標題和 Current Function 方塊中(在此範例中為 GetNumber)。 呼叫目前函式的函式會顯示在左側 呼叫函式,而目前函式所呼叫的任何函式都會顯示在右側的 [呼叫函式] 方塊中。 (您可以選取任一方塊來變更目前的函式。
此檢視會顯示函式完成的整體應用程式運行時間總計(毫秒)和百分比。
函式主體 也會顯示在函式主體中花費的總時間量(以及佔用的時間百分比),不包括在呼叫或被呼叫函式中花費的時間。 (在此範例中,函數主體花費了 2389 毫秒中的 2367 毫秒,其餘 22 毫秒則用於此函式所呼叫的外部程式代碼中)。
提示
函式主體 中的高值可能表示函式本身的效能瓶頸。
若要查看顯示呼叫函式順序的較高層級檢視,請從窗格頂端的下拉式清單中選取 [呼叫樹狀結構]。
此圖中的每個編號區域都與程式中的步驟相關。
圖像 |
描述 |
|
CPU 使用量呼叫樹狀結構中的最上層節點,代表應用程式。 |
|
在大部分應用程式中,停用 [顯示外部程式代碼] 選項時,第二層節點是 [外部程式代碼] 節點,其中包含啟動和停止應用程式的系統和架構程式代碼、繪製 UI、控制線程排程,以及提供應用程式的其他低階服務。 |
|
第二層節點的子系是使用者程式代碼方法和異步例程,由第二層系統和架構程式代碼呼叫或建立。 |
|
方法的子節點只包含父方法呼叫的數據。 停用 顯示外部程式碼 時,應用程式方法也可以包含 [外部程式代碼] 節點。 |
以下是欄位值的更多詳細資訊:
CPU 總計表示函式及其所呼叫的任何函式已完成多少工作。 高總 CPU 值指向整體成本最高的函式。
自我 CPU 指出函式主體中的程式代碼完成了多少工作,但不包括被它所呼叫的函式所完成的工作。 高 自身 CPU 值可能表示功能本身的效能瓶頸。
模組 包含函式的模組名稱,或 [外部程式碼] 節點中包含函式的模組數目。
若要查看在呼叫樹檢視中使用最高 CPU 百分比的函式呼叫,請按 展開熱路徑。 熱門路徑可協助您將調查重點放在影響最大的區域。
備註
如果您在呼叫樹狀結構中看到標示為「損壞」或「無法遍歷的堆疊」的代碼,這表示 Windows 事件追蹤 (ETW) 事件可能已遺失。 嘗試重新收集相同的追蹤資料,以解決問題。
若要查看數據的不同檢視,請從窗格頂端的下拉式清單中選取 [Flame Graph]。
火焰圖提供呼叫樹狀結構的不同視覺效果,可協助您分析數據。 如需詳細資訊,請參閱 使用火焰圖形識別熱路徑。
若要查看依函式或模組匯總的數據檢視,請從窗格頂端的下拉式清單中選取 [函式 或 模組。
這些檢視有助於識別因高呼叫計數和/或效能問題的組合而可能造成效能瓶頸的函式或模組。
外部程式代碼是系統與架構元件中的函式,由您撰寫的程式代碼所執行。 外部程式代碼包含啟動和停止應用程式的函式、繪製UI、控制線程,以及為應用程式提供其他低階服務。 在大部分情況下,您不會對外部程式碼感興趣,因此 CPU 使用量工具會將使用者方法的外部函式收集到一個 [外部呼叫] 節點。
如果您想要檢視外部程式代碼的呼叫路徑,請從 [ 設定] 清單取消選取 [顯示 Just My Code],然後選擇 [套用]。
外部程式代碼是系統與架構元件中的函式,由您撰寫的程式代碼所執行。 外部程式代碼包含啟動和停止應用程式的函式、繪製UI、控制線程,以及為應用程式提供其他低階服務。 在大部分情況下,您不會對外部程式碼感興趣,因此 CPU 使用量工具會將使用者方法的外部函式收集到一個 [外部程式碼] 節點。
如果您想要檢視外部程式代碼的呼叫路徑,請從 [篩選] 檢視 清單中選擇 [顯示外部程式碼],然後選擇 [套用 ]。
請注意,許多外部程式代碼呼叫鏈結都是深度巢狀的,因此[函式名稱] 數據行的寬度可以超過計算機監視器中除了最大電腦監視器的顯示寬度。 發生這種情況時,函式名稱會顯示為 [...]。
使用搜尋方塊來尋找您要尋找的節點,然後使用水平滾動條將數據帶入檢視。
提示
如果您分析呼叫 Windows 函式的外部程式碼,您應該確定您擁有最新的 。pdb 檔案。 如果沒有這些檔案,您的報表檢視會列出晦澀且難以理解的 Windows 函式名稱。 如需有關如何確定您擁有所需檔案的詳細資訊,請參閱 在調試程式中指定符號 (.pdb) 和來源檔案。
在本教學課程中,您已瞭解如何收集和分析 CPU 使用量數據。 如果您已完成分析工具 的導覽,您可能想要參考示範如何更有效地使用工具的教學課程。
在本教學課程中,您已瞭解如何在偵錯時收集和分析 CPU 使用量數據。 您可能想要深入瞭解使用效能分析工具分析發行組建。