初步認識分析工具 (C#、Visual Basic、C++、F#)

應用程式效能測量工具對於想要最佳化程式碼並改善應用程式效能的開發人員而言非常重要。 Visual Studio 提供各種分析和診斷工具,可協助您診斷記憶體和 CPU 使用量,以及其他應用程式層級的問題。 使用這些工具,您可在執行應用程式時累積效能資料。 分析工具可藉由提供應用程式的執行時間和 CPU 使用量的視覺描述,協助您快速做出明智的決策。 在本文中,我們會快速查看最常見的分析工具。

若要獲得選擇正確工具的協助,或是查看針對不同應用程式類型的分析工具支援,請參閱應該使用哪一種工具?。 如需示範使用分析工具來最佳化程式碼的一般方法教學課程,請參閱最佳化程式碼的初學者指南

在發行組建中測量效能

效能分析工具中的工具旨在提供發行組建的分析。 使用效能分析工具時,您可以在執行應用程式時收集診斷資訊,並在應用程式停止 (像是事後檢討分析) 檢查所收集的資訊。

選擇 [偵錯]> [效能分析工具] (或 Alt + F2) 以開啟效能分析工具。

效能分析工具的螢幕擷取畫面。

效能分析工具的螢幕擷取畫面。

如需在效能分析工具與偵錯工具整合工具中使用 CPU 使用量或記憶體使用量工具的詳細資訊,請參閱使用或不使用偵錯工具來執行分析工具

效能分析工具中可用的工具包括:

若要查看針對不同應用程式類型的分析工具支援,請參閱應該使用哪一種工具?

在某些情況下,您可以透過此視窗選取多個分析工具。 [CPU 使用量] 這類工具也可以提供有助於分析的補充資料。 您也可以使用命令列分析工具來啟用涉及多個分析工具的案例。

在偵錯時測量效能

您可以在偵錯工作階段期間,存取 [診斷工具] 視窗提供的分析工具。 [偵錯工具] 視窗會自動出現,除非您將其關閉。 如需顯示視窗,請按一下 [偵錯] / [視窗] / [顯示診斷工具] (或按 Ctrl + Alt + F2)。 視窗開啟時,您可以選取要用來收集資料的工具。

[診斷工具] 視窗

在進行偵錯期間,您可以使用 [診斷工具] 視窗來分析 CPU、記憶體使用量、.NET 計數器,而且您也可以檢視顯示效能相關資訊的事件。

[診斷工具] 視窗

在進行偵錯期間,您可以使用 [診斷工具] 視窗,分析 CPU 和記憶體使用量,您也可以檢視顯示效能相關資訊的事件。

[診斷工具摘要] 檢視

[診斷工具摘要] 檢視

若要分析您的應用程式,常用方法是使用 [診斷工具] 視窗,但您也可以針對發行組建改為執行應用程式的事後剖析分析。 如需不同方法的詳細資訊,請參閱使用或不使用偵錯工具來執行分析工具。 若要查看針對不同應用程式類型的分析工具支援,請參閱應該使用哪一種工具?

[診斷工具] 視窗或偵錯工作階段期間可用的工具包括:

提示

使用重新啟動以略過啟動頁面,並按 Alt+F2 或按一下 [偵錯] > [效能分析工具] 來自動執行先前的設定。

注意

Windows 8 及更新版本必須執行附有偵錯工具的分析工具 ([診斷工具] 視窗)。

分析 CPU 使用量

CPU 使用量工具是您開始分析應用程式效能的最佳入門。 它會告訴您應用程式耗用的 CPU 資源詳細資訊。 您可以使用偵錯工具整合 CPU 使用量工具事後剖析 CPU 使用量工具

使用偵錯工具整合 CPU 使用量工具時,請開啟 [診斷工具] 視窗 (如果已關閉,請選擇 [偵錯] / [Windows] / [顯示診斷工具])。 偵錯時,開啟 [摘要] 檢視,然後選取 [記錄 CPU 設定檔]

在診斷工具中啟用 CPU 使用量

在診斷工具中啟用 CPU 使用量

其中一種使用工具的方式,是為您的程式碼設定兩個中斷點:一個在函式開頭,一個在函式結尾 (或您想要分析的程式碼區域)。 當您在第二個中斷點上暫停時,即可檢查分析資料。

[CPU 使用量] 檢視會顯示一份執行時間最長的函式清單,並將執行時間最長的函式放在 [前幾大函式] 底下的最上方。 [最忙碌路徑] 區段會顯示使用最多 CPU 之函式的呼叫堆疊。 這些清單可協助引導您找出發生效能瓶頸的函式。

[診斷工具 CPU 使用量] 檢視

[CPU 使用量] 檢視會顯示一份執行時間最長的函式清單,並將時間最長的放在頂端來排序。 這可協助引導您找出發生效能瓶頸的函式。

[診斷工具 CPU 使用量] 檢視

按一下您感興趣的函式,您會看到更詳細的呼叫樹狀結構檢視,並醒目提示選取的函式。 資料表會顯示資料行,包含例如函式中花費時間的資料,包括已呼叫函式 (CPU 總計),以及顯示函式所花費時間的第二個資料行,排除已呼叫函式 (自我 CPU)。 這項資料可協助您評估函式本身是否有效能瓶頸。

提示

Visual Studio 分析工具同時支援收集和檢視追蹤。 分析工具也可以檢視先前由其他工具收集的追蹤,例如 dotnet-trace。 Dotnet-trace 會產生取樣結果,而不是檢測的追蹤。 如需詳細資訊,請參閱 dotnet-trace

診斷工具的呼叫端與被呼叫端「蝶型」檢視

按一下感興趣的函式,即會看到更詳細的三個窗格「蝶型」檢視:視窗中間為已選取的函式、左側為發出呼叫的函式,右側為接收呼叫的函式。 [函式主體] 區段會顯示函式主體所花費的總時間 (和時間百分比),但不包括發出呼叫的函式和接收呼叫的函式所花的時間。 這項資料可協助您評估函式本身是否有效能瓶頸。

診斷工具的呼叫端與被呼叫端「蝶型」檢視

分析記憶體使用量

[診斷工具] 視窗也可讓您使用 [記憶體使用量] 工具,評估應用程式的記憶體使用量。 例如,您可以查看堆積的物件數目和大小。 您可以在效能分析工具中使用偵錯工具整合記憶體使用量工具事後剖析記憶體使用量工具

.NET 開發人員可以在 .NET 物件配置工具記憶體使用量工具之間選擇。

  • .NET 物件配置工具可協助您識別 .NET 程式碼中的配置模式和異常狀況,並協助識別記憶體回收的常見問題。 此工具只會以事後剖析工具的形式執行。 您可以在本機或遠端電腦上執行此工具。
  • 記憶體使用量工具有助於識別記憶體流失,這在 .NET 應用程式中並不常見。 如果您需要在檢查記憶體時使用偵錯工具功能,例如逐步執行程式碼,建議使用偵錯工具整合記憶體使用量工具。

若要使用記憶體使用量工具分析記憶體使用量,您需要擷取至少一個記憶體快照集。 通常,分析記憶體的最佳方式是擷取兩個快照:第一個快照是在可能發生記憶體問題之前擷取,第二個快照則是緊接在可能發生記憶體問題之後擷取。 然後您可以檢視兩個快照的差異,並查看其中到底有什麼變更。 下圖顯示使用偵錯工具整合工具擷取快照集。

在診斷工具中擷取快照

在診斷工具中擷取快照

當您選取其中一個箭號連結時,即可取得堆積的差異檢視 (紅色向上箭號 記憶體使用量增加 表示物件計數 (左) 或堆積大小 (右) 有所增加)。 如果您按一下右邊的連結,即會取得差異堆積檢視,該檢視會以堆積大小增加最多的物件來排序。 這麼做有助您鎖定記憶體的問題。 如下圖所示,ClassHandlersStore 物件使用的位元組在第二張快照中增加了 3,492 個位元組。

診斷工具堆積差異檢視

診斷工具堆積差異檢視

如果您按一下左側的連結,而不是 [記憶體使用量] 檢視,堆積檢視就會依照物件計數來組織;數目增加最多的特定類型物件會顯示在頂端 (依 [計數差異] 資料行排序)。

測試設備

檢測設備工具類似於 CPU 使用量工具,不同之處在於它提供確切的呼叫計數和時鐘時間,而不是 CPU 使用率。 檢測設備方法需要比 CPU 使用量工具更多的額外負荷。 此工具可在效能分析工具中使用。 選擇 [偵錯]> [效能分析工具] (或 Alt + F2) 以開啟效能分析工具。 如需詳細資訊,請參閱檢測設備

顯示 .NET Instrumentation 資料的螢幕擷取畫面。

檢查檔案 I/O

檔案 I/O 工具可協助您了解如何最佳化檔案 I/O 作業,以改善應用程式的效能。 如果您嘗試調查和診斷載入時間緩慢,新的檔案 IO 工具可協助您了解 I/O 作業如何影響您花費的時間。 此工具可在效能分析工具中使用。 選擇 [偵錯] > [效能分析工具] (或 Alt + F2) 以開啟效能分析工具。

此工具會在索引標籤式清單檢視中顯示檔案讀取和檔案寫入作業。

顯示檔案 IO 工具已停止的螢幕擷取畫面。

使用 PerfTips 檢查效能

通常,檢視效能資訊最簡單的方式是使用 PerfTips。 使用 PerfTips,您可以在與程式碼互動時檢視效能資訊。 您可以檢查事件持續時間等資訊 (從上次暫停偵錯工具或應用程式啟動時開始測量)。 例如,如果您逐步執行程式碼 (F10、F11),PerfTips 會顯示應用程式從上一個步驟作業到目前步驟的執行階段持續期間。

PerfTips 的螢幕擷取畫面。

PerfTips 的螢幕擷取畫面。

您可以使用 PerfTips 來檢查程式碼區塊執行所需的時間,或單一函式完成所需的時間。

PerfTips 會顯示診斷工具 [事件] 檢視中也會顯示的相同事件。 在 [事件] 檢視中,您可以檢視在偵錯時所發生的不同事件,例如設定中斷點或逐步執行程式碼的作業。

診斷工具事件檢視的螢幕擷取畫面。

診斷工具事件檢視的螢幕擷取畫面。

注意

如果您有 Visual Studio Enterprise,也可以查看這個索引標籤中的 IntelliTrace 事件

分析非同步程式碼 (.NET)

.NET 非同步工具可讓您分析應用程式中非同步程式碼的效能。 此工具可在效能分析工具中使用。 選擇 [偵錯]> [效能分析工具] (或 Alt + F2) 以開啟效能分析工具。

此工具會在清單檢視中顯示每個非同步作業。 您可以看到非同步作業的開始時間、結束時間和時間總計等資訊。

.NET Async 工具已停止

分析非同步程式碼 (.NET)

.NET 非同步工具可讓您分析應用程式中非同步程式碼的效能。 此工具可在效能分析工具中使用。 選擇 [偵錯]> [效能分析工具] (或 Alt + F2) 以開啟效能分析工具。

此工具會在清單檢視中顯示每個非同步作業。 您可以看到非同步作業的開始時間、結束時間和時間總計等資訊。

.NET Async 工具已停止

檢查應用程式事件

一般事件檢視器可讓您透過模組載入、執行緒啟動和系統設定等事件清單來檢視應用程式的活動,以協助在 Visual Studio 分析工具內更妥善地診斷應用程式執行的方式。 此工具可在效能分析工具中使用。 選擇 [偵錯]> [效能分析工具] (或 Alt + F2) 以開啟效能分析工具。

此工具會在清單檢視中顯示每個事件。 資料行會提供每個事件的相關資訊,例如事件名稱、時間戳記和程序識別碼。

事件檢視器追蹤

分析資料庫效能 (.NET Core)

對於使用 ADO.NET 或 Entity Framework Core 的 .NET Core 應用程式,資料庫工具可讓您記錄應用程式在診斷工作階段期間所做的資料庫查詢。 然後,您可以分析個別查詢的相關資訊,以找出可改善應用程式效能的位置。 此工具可在效能分析工具中使用。 選擇 [偵錯]> [效能分析工具] (或 Alt + F2) 以開啟效能分析工具。

此工具會在清單檢視中顯示每個查詢。 您可以看到查詢開始時間和持續時間等資訊。

配置

視覺化 .NET 計數器 (.NET Core)

從 Visual Studio 2019 16.7 版開始,您可以使用 Visual Studio 中的 .NET 計數器工具視覺化效能計數器。 您可以使用 dotnet 計數器將建立的計數器視覺化。 dotnet 計數器支援許多計數器,例如 CPU 使用量和記憶體回收行程堆積大小。

此工具會在清單檢視中顯示每個計數器的即時值。

.NET 計數器工具正在收集。

分析資源取用量 (XAML)

在 XAML 應用程式 (例如 Windows 傳統型 WPF 應用程式和 UWP App) 中,您可以使用應用程式時間軸工具來分析資源耗用量。 例如,您可以分析應用程式準備 UI 畫面格 (版面配置和轉譯)、服務網路和磁碟要求,以及像是應用程式啟動、頁面載入和視窗大小調整等情況所花費的時間。 若要使用此工具,請選擇 [效能分析工具] 中的 [應用程式時間軸],然後選擇 [開始]。 在應用程式中,完整瀏覽具有可疑資源消耗問題的案例,然後選擇 [停止收集] 以產生報表。

如果您執行應用程式時出現視覺化的問題,其可能反應在 [視覺輸送量] 圖形中的低畫面播放速率。 同樣地,若出現 UI 回應性問題,也可能會反應在 [UI 執行緒使用率] 圖形中居高的數字。 您可以在報表中針對可疑的效能問題選擇一個時段,然後檢查 [時間軸] 詳細資料檢視 (下方窗格) 中的詳細 UI 執行緒活動。

應用程式時間軸分析工具

應用程式時間軸分析工具

在 [時間軸] 詳細資料檢視中,您可以找到活動類型 (或相關的 UI 項目) 和活動持續時間等資訊。 例如,圖例中,格線控制項的 [配置] 事件花了 57.53 毫秒。

如需詳細資訊,請參閱應用程式時間軸

檢查 UI 效能和協助工具事件 (UWP)

在 UWP 應用程式中,您可以啟用 [診斷工具] 視窗中的 [UI 分析]。 此工具會搜尋常見的效能或協助工具問題,並於偵錯時將問題顯示在 [事件] 檢視中。 事件描述提供有助您解決問題的相關資訊。

在診斷工具中檢視 UI 分析事件

在診斷工具中檢視 UI 分析事件

分析 GPU 使用率 (Direct3D)

在 Direct3D 應用程式中 (Direct3D 元件必須為 C++),您可以檢查 GPU 上的活動並分析效能問題。 如需詳細資訊,請參閱 GPU 使用量。 若要使用此工具,請選擇效能分析工具中的 [GPU 使用量],然後選擇 [開始]。 在應用程式中,完整瀏覽您想要分析的案例,然後選擇 [停止收集] 以產生報表。

當您在圖形中選擇一個時段,並選擇 [檢視詳細資料] 時,下方窗格即會顯示詳細的檢視。 在詳細的檢視中,您可以檢查每個 CPU 和 GPU 上發生多少活動。 您可以選取最下方窗格中的事件,取得時間軸的快顯功能表。 例如,選取 [Present] 事件以檢視 Present 呼叫快顯功能表 (您可以參考淺灰色垂直 VSync 線,藉此了解特定 Present 呼叫是否錯過了 VSync。每兩條 VSync 之間必須有一個 Present 呼叫,以讓應用程式穩定地達到 60 FPS。)

GPU 使用量分析工具

GPU 使用量分析工具

您也可以使用圖形來判斷是否有佔用 CPU 或 GPU 資源的效能瓶頸。

分析效能 (舊版工具)

在 Visual Studio 2019 中,舊版效能總管和相關分析工具 (例如 [效能精靈]) 已摺疊至 [效能分析工具],您可以使用 [偵錯]> [效能分析工具] 開啟。 在效能分析工具中,可用的診斷工具取決於所選擇的目標,以及目前開啟的啟動專案。 CPU 使用量工具提供先前在「效能精靈」中支援的取樣功能。 檢測工具提供「效能精靈」中的檢測分析功能 (適用於精確呼叫計數和持續時間)。 其他記憶體工具也會出現在效能分析工具中。

效能總管工具