在 Visual Studio 中檢測 .NET 應用程式(C#、C++、Visual Basic、F#)
隨著 Visual Studio 2022 版本 17.5 的推出,您可以使用新的動態儀器化工具。 此工具會顯示呼叫函式的確切次數,且速度比舊版檢測工具快。 此工具支援 .NET Core 檢測,而不需要 PDB。 從 Visual Studio 2022 17.6 版 Preview 2 開始,此工具也支援 C/C++。
此工具類似於 CPU 使用量工具,不同之處在於它是以時鐘時間為基礎,而不是 CPU 使用率。 這表示阻塞時間,例如等候鎖定所花費的時間,會顯示在工具追蹤記錄中,而不像 CPU 使用量工具。 如需瞭解如何有效地使用檢測工具的其他資訊,請參閱 檢測概觀 和 案例研究:隔離效能問題。
檢測您的應用程式
選取 Alt+F2 (或 Debug > Performance Profiler),以在 Visual Studio 中開啟效能分析工具。
選取 [儀器] 複選框。
如果您在啟動分析工具之前先啟用 [開始處於暫停狀態的收集] 選項,那麼直到您在診斷會話檢視中選取 [記錄] 按鈕後才會開始收集數據。
注意
如果此工具無法進行選取,請清除所有其他工具的複選框,因為某些工具需要單獨執行。 若要深入了解同時執行多個分析工具,請參閱 同時使用多個效能分析工具。
如果工具仍然無法使用,請檢查您的專案是否符合上述需求。 請確定您的專案處於發行模式,以擷取最精確的數據。
選取 開始 按鈕以執行此工具。
選取程式中要檢測的專案。
從 Visual Studio 2022 17.11 版開始,效能分析器會針對下一次分析執行保留選擇的項目。
從 Visual Studio 2022 17.13 版 Preview 1 開始,您可以選取要檢測C++的專案。
選取 [確定]。
工具開始執行之後,請流覽您想要在應用程式中分析的案例。 然後選取 [停止收集 或關閉應用程式以查看您的資料。
分析儀器報告
您的程式代碼剖析數據會出現在 Visual Studio 中。
[工具數據] 檢視畫面會顯示按運行時間排序的函式清單,運行時間最長的函式位於最上方 Top Functions。 [經常性路徑] 區段會顯示使用最多時間之函式的呼叫堆疊。 這些清單能幫助你識別效能瓶頸所在的功能。
按兩下您感興趣的函式,您會看到更詳細的檢視。
可用的數據類似於 CPU 使用量工具,不同之處在於它是以時鐘時間和呼叫計數為基礎,而不是 CPU 使用率。
分析見解
如果在 Top Insights 區段中顯示任何深入見解,請使用提供的連結來取得已識別問題的詳細資訊。 如需詳細資訊,請參閱 CPU 深入解析,但請注意,檢測工具的信息特別針對時鐘時間,而非 CPU 使用率。
此外,如果您使用 Copilot,請使用 Ask Copilot 按鈕來開啟 Copilot 聊天視窗,而 Copilot 會根據您的程式代碼檢查和任何已識別的問題提供建議。
分析儀器詳細報告
若要分析檢測報表,請按一下 [開啟詳細數據],或按一下其中一個最常用功能來開啟 功能 視圖。
此報表提供診斷資料的不同檢視:
檢視 | 描述 |
---|---|
來電者/被呼叫者 | 詳細檢視特定函式所花費的時間、呼叫它的函式,以及它所呼叫的函式。 效能數據會針對數據收集期間進行匯總。 您可以選取發起呼叫的函式和被呼叫的函式來周遊呼叫路徑。 |
呼叫樹 | 函式呼叫路徑的階層式檢視。 用來識別花費最多時間的呼叫路徑(經常性路徑)。 |
模組 | 查看在各個模組中所花費的時間,在資料收集期間匯總。 用於識別可能由於高呼叫次數和/或效能問題組合而成為效能瓶頸的模組。 |
功能 | 查看個別函式中花費的時間,並在數據收集期間進行匯總。 用來識別因高呼叫計數和/或效能問題的組合而可能造成效能瓶頸的函式。 |
火焰圖 | 火焰圖形視覺效果中函式呼叫路徑的階層式檢視。 用來識別花費最多時間的呼叫路徑(經常性路徑)。 |
在呼叫者/被呼叫者以外的所有檢視中,診斷報告會按照 總 [unit,%]從最高到最低排序。 選取數據行標頭來變更排序順序或排序數據行。 您可以按兩下您感興趣的函式,您會看到函式的來源,並反白顯示該函式所花費的時間。 數據表會顯示數據列,其中一個數據列顯示函式中花費的總時間,包括被呼叫的函式(Total),而第二個數據列顯示函式自身花費的時間,不包括被呼叫的函式(Self)。
此數據可協助您評估函式本身是否為效能瓶頸。 判斷方法所顯示的數據量,以查看第三方程式代碼或運行時間連結庫是否是您端點速度緩慢或耗用大量資源的原因。
如需使用 Flame 圖形的詳細資訊,請參閱 使用 Flame Graph 識別熱路徑。
工具化呼叫樹
若要檢視呼叫樹狀結構,請選取報表中的父節點。 根據預設,儀器化 頁面會開啟至 呼叫方/被叫方 檢視。 在 [目前檢視] 的 下拉式清單中,選取 [呼叫樹狀結構]。 呼叫樹檢視可協助您快速識別效能瓶頸。
您可以按下 [展開經常性路徑,並 顯示經常性路徑 按鈕,以查看在呼叫樹視圖中使用最多時鐘時間的函式呼叫。
以下是資料行值的詳細資訊:
Total 指出函式中花費的時間,以及它所呼叫的任何函式。 高 總計 值指向耗用最多時鐘時間的函式。
Self 指出函式主體中花費的時間,不包括它所呼叫之任何函式所花費的時間。 高 Self 值可能表示功能本身的性能瓶頸。
呼叫計數 表示呼叫函式的次數。
模組 包含函式的模組名稱。
檢測呼叫樹狀結構中的異步呼叫 (.NET)
從 Visual Studio 2022 版本 17.13 預覽版 2 開始,視圖將可視化呼叫樹中的 .NET 異步呼叫巢狀於呼叫所在的函式下,使您在單一、統一的堆疊追蹤中更容易追蹤執行流程。 這可協助您快速找出效能瓶頸。
統一堆棧追蹤會在 [摘要] 頁面的 [呼叫樹狀結構] 檢視和 [熱路徑] 區段中顯示。 異步節點標示為 [異步呼叫] 描述符。
您可以從分析工具的 [摘要] 檢視中的 [篩選] 選項中,選取 [縫合異步堆疊],以切換合併異步呼叫堆疊的顯示。 此設定預設為啟用狀態。