本文介绍诊断工具以及如何在 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 到本地文件夹中,通常是 Downloads Windows 上的文件夹。
.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 到本地文件夹中,通常是 Downloads Windows 上的文件夹。
.nettrace若要查看该文件,请使用 Visual Studio 或 PrefView。
有关详细信息,请参阅 使用 EventPipe 跟踪 .NET 应用程序。
用于启用诊断集成的 MSBuild 属性
| 资产 | 违约 | 将值设置为... | DESCRIPTION |
|---|---|---|---|
<EnableDiagnostics> |
false |
true |
启用对 WebAssembly 性能跟踪的支持。 |
<WasmPerformanceInstrumentation> |
无值 | 请参阅表† | 启用探查器所需的工具。 该属性遵循 callspec 语法。 †对于允许的值,请参阅下表。 |
<MetricsSupport> |
false |
true |
启用 System.Diagnostics.Metrics 支持。 有关详细信息,请参阅 System.Diagnostics.Metrics 命名空间。 |
<EventSourceSupport> |
false |
true |
启用 EventPipe 支持。 有关详细信息,请参阅 诊断和检测:可观测性和遥测。 |
下表描述了可 <WasmPerformanceInstrumentation> 允许的值。
<WasmPerformanceInstrumentation> 值 |
DESCRIPTION |
|---|---|
all |
所有程序集 |
program |
入口点程序集 |
{ASSEMBLY} |
指定程序集({ASSEMBLY}) |
M:Type:{METHOD} |
指定方法 ({METHOD}) |
N:{NAMESPACE} |
指定命名空间 ({NAMESPACE}) |
T:{TYPE} |
指定类型 ({TYPE}) |
+EXPR |
包括表达式 |
-EXPR |
排除表达式 |
代码应频繁让出执行权给主浏览器循环,以便采集跟踪信息。 执行长时间运行的循环时,内部诊断缓冲区可能会溢出。
注意
启用性能分析器和诊断工具会对大小和性能产生负面影响,因此不要在生产环境中启用性能分析器并发布应用。