本文說明診斷工具,以及如何在 Blazor 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 |
排除表達式 |
您的程式代碼應該經常讓位於主瀏覽器循環,以便收集追蹤。 執行長時間執行的迴圈時,內部診斷緩衝區可能會溢位。
謹慎
啟用分析工具和診斷工具會對大小和效能產生負面影響,因此請勿在啟用分析工具的情況下發佈生產應用程式。