共用方式為


ASP.NET Core Blazor WebAssembly 事件管道診斷

本文說明診斷工具,以及如何在 Blazor WebAssembly 應用程式中使用它們。

所有情境的必要條件

安裝 .NET WebAssembly 建置工具

dotnet workload install wasm-tools

WebAssembly 應用程式如何使用記憶體,以及如何針對記憶體流失進行疑難解答

在應用程式的項目檔 (.csproj) 中,在調查期間新增下列屬性:

<PropertyGroup>
  <EnableDiagnostics>true</EnableDiagnostics>
</PropertyGroup>

警告

請勿在生產環境中啟用診斷,因為它對效能造成負面影響。

利用wasm-tools工作負載來建置您的應用程式。

在瀏覽器中開啟應用程式,並流覽至有問題的頁面或元件。

藉由呼叫 collectGcDump JavaScript API 來擷取受控記憶體轉儲:

globalThis.getDotnetRuntime(0).collectGcDump();

從瀏覽器開發人員工具主控台或應用程式的 JavaScript 程式碼呼叫上述 API。

檔案 .nettrace 會從瀏覽器下載到本機資料夾,通常是 Downloads Windows 上的資料夾。

使用.gcdump工具將傾印轉換成dotnet-gcdump格式。 若要檢視轉換的 .gcdump 檔案,請使用 Visual Studio 或 PrefView。

如需詳細資訊,請參閱 檢視從 dotnet-gcdump 擷取的 GC 傾印

WebAssembly 應用程式如何使用 CPU,以及如何尋找緩慢或高耗能的方法

在應用程式的項目檔 (.csproj) 中,在調查期間新增下列屬性:

<PropertyGroup>
  <EnableDiagnostics>true</EnableDiagnostics>
  <!-- Disable debugger -->
  <WasmDebugLevel>0</WasmDebugLevel>
  <!-- Sampling in all methods, see below for filtering options -->
  <WasmPerformanceInstrumentation>all</WasmPerformanceInstrumentation>
</PropertyGroup>

警告

請勿在生產環境中啟用診斷,因為它對效能造成負面影響。

使用wasm-tools的工作負載來建置應用程式。

在瀏覽器中開啟應用程式,並流覽至有問題的頁面或元件。

藉由呼叫 collectCpuSamples JavaScript API,開始收集 CPU 樣本 60 秒。

globalThis.getDotnetRuntime(0).collectCpuSamples({durationSeconds: 60});

從瀏覽器開發人員工具主控台或應用程式的 JavaScript 程式碼呼叫上述 API。

開始使用應用程式來執行有問題的程序代碼。

在預先定義的時間段之後,瀏覽器會將 .nettrace 檔案下載到本機資料夾中,通常是 Windows 上的 Downloads 資料夾。 若要檢視檔案 .nettrace ,請使用Visual Studio或 PrefView。

如需詳細資訊,請參閱 使用 EventPipe 追蹤您的 .NET 應用程式

Timing-Allow-Origin HTTP 標頭允許更精確的時間測量。

如何監測 WebAssembly 應用程式所發出的計量

在應用程式的項目檔 (.csproj) 中,在調查期間新增下列屬性:

<PropertyGroup>
  <EnableDiagnostics>true</EnableDiagnostics>
  <MetricsSupport>true</MetricsSupport>
  <EventSourceSupport>true</EventSourceSupport>
</PropertyGroup>

警告

請勿在生產環境中啟用診斷,因為它對效能造成負面影響。

使用wasm-tools的工作負載來建置應用程式。

在瀏覽器中開啟應用程式,並流覽至有問題的頁面或元件。

透過呼叫 collectMetrics JavaScript API,開始收集度量,持續 60 秒:

globalThis.getDotnetRuntime(0).collectMetrics({durationSeconds: 60});

從瀏覽器開發人員工具主控台或應用程式的 JavaScript 程式碼呼叫上述 API。

在預先定義的時間段之後,瀏覽器會將 .nettrace 檔案下載到本機資料夾中,通常是 Windows 上的 Downloads 資料夾。 若要檢視檔案 .nettrace ,請使用Visual Studio或 PrefView。

如需詳細資訊,請參閱 使用 EventPipe 追蹤您的 .NET 應用程式

啟用診斷整合的 MSBuild 屬性

房產 預設 將值設定為... 說明
<EnableDiagnostics> false true 啟用對 WebAssembly 效能追蹤的支援。
<WasmPerformanceInstrumentation> 沒有值 請參閱表格† 啟用取樣分析器所需的工具設置。 屬性遵循 callspec 語法。 †如需允許的值,請參閱下表。
<MetricsSupport> false true 啟用 System.Diagnostics.Metrics 支援。 如需詳細資訊,請參閱 System.Diagnostics.Metrics 命名空間
<EventSourceSupport> false true 啟用 EventPipe 支援。 如需詳細資訊,請參閱 診斷和檢測:可檢視性和遙測

下表描述允許的 <WasmPerformanceInstrumentation> 值。

<WasmPerformanceInstrumentation> 說明
all 所有組件
program 進入點元件
{ASSEMBLY} 指定組件 ({ASSEMBLY}
M:Type:{METHOD} 指定方法 ({METHOD}
N:{NAMESPACE} 指定命名空間 ({NAMESPACE}
T:{TYPE} 指定類型 ({TYPE}
+EXPR 包含表達式
-EXPR 排除表達式

您的程式代碼應該經常讓位於主瀏覽器循環,以便收集追蹤。 執行長時間執行的迴圈時,內部診斷緩衝區可能會溢位。

謹慎

啟用分析工具和診斷工具會對大小和效能產生負面影響,因此請勿在啟用分析工具的情況下發佈生產應用程式。

其他資源