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 到本地文件夹中,通常是 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 排除表达式

代码应频繁让出执行权给主浏览器循环,以便采集跟踪信息。 执行长时间运行的循环时,内部诊断缓冲区可能会溢出。

注意

启用性能分析器和诊断工具会对大小和性能产生负面影响,因此不要在生产环境中启用性能分析器并发布应用。

其他资源