本主题介绍如何使用 Windows Performance Toolkit 中的性能监视工具为 WinUI 应用程序生成深层性能配置文件。
如何使用 Windows 性能记录器监视 WinUI 应用?
Windows性能记录器(WPR)可用于基于内置配置文件创建详细的Event Tracing for Windows(ETW)记录,以捕捉系统和应用程序的行为以及资源使用情况。 然后,Windows Performance Analyzer (WPA) 可以处理这些 ETW 记录,以生成一组图形和表,可方便使用并深入分析 CPU 使用率、电源问题、系统或应用程序性能不佳以及其他性能问题。
注释
虽然 WPR 有 GUI 和命令行版本,但本主题仅提及 GUI 版本(有关这两个版本的更多详细信息,请参阅 WPR 简介)。
WPR 剖面
WPR 分析文件用于收集有关应用程序的各个方面和行为的信息。
在下图中,显示了“Windows 性能记录工具”窗口,其中选择了“CPU 使用率”配置文件(显示系统上每个 CPU 的使用情况)和“XAML 活动”配置文件(显示来自 XAML 相关提供程序的事件:例如 WinUI)。
如何将 Windows Performance Analyzer 与 WinUI 应用配合使用?
WinUI 是声明性保留模式 API,其中应用描述 UIElements 树,WinUI 运行布局并呈现布局。 这在 UI 线程上以称为“帧”的批处理方式完成,最好在显示的一个刷新间隔内快速完成。 当帧运行时间较长时,不仅会延迟其显示更新,而且还会阻止 UI 线程处理输入。 帧速慢虽然不是响应问题的唯一原因,但也是最常见的原因之一。
安装“XAML 帧分析”插件
WinUI 记录跟踪每个帧的开始和停止的 ETW 事件(如以下 WPA“泛型事件”表的屏幕截图所示)。 但是,由于需要手动计算每个帧的持续时间,因此很难识别帧出现缓慢的情况。
若要解决此问题,Windows评估工具包(ADK) 10.1.26100.1 及更高版本随附新的“XAML 帧分析”表插件。 此表计算并显示每个帧的持续时间(以及其他耗时的操作)。
注释
“XAML 帧分析”表需要Windows ADK 10.1.26100.1 或更高版本Windows Performance Analyzer(WPA)。 用于跟踪的 WPR 版本并不重要。
安装 ADK 后,必须通过编辑 WPA 文件夹中的“perfcore.ini”配置文件(通常为 C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit 来启用“XAML 帧分析”表。 为此,请关闭 WPA 的任何打开实例,在文本编辑器中打开“perfcore.ini”,将 perf_xaml.dll 添加到 dll 列表,然后保存并关闭文件。 重启 WPA,现在应在“系统活动”部分底部显示“XAML 帧分析”图。
使用“XAML 帧分析”插件
Xaml 帧分析支持两个视图(两个视图都显示相同的列):
- “有趣的 Xaml 帧”(默认)- 显示基于启发法识别出的 WinUI 帧,这些帧最有可能导致响应性问题。 这些对应于从 WinUI 初始化、帧导航或浮出控件显示等操作开始的区域,并在下一帧结束时停止。 这些方案通常涉及对 UIElement 树的大量更改,并且最容易遇到性能问题。
- “所有 Xaml 信息” - 显示追踪中所有进程的所有 WinUI 框架。 对于帧或布局处理等操作,插件会自动根据开始和停止事件计算并显示持续时间。
以下屏幕截图突出显示如何在 Xaml 帧分析视图之间切换。
这两个 Xaml 帧分析视图包含以下列:
| 标题 | 价值 |
|---|---|
| 过程 | 进程名称和 ID |
| 线程 ID | 线程 ID |
| 类型 | 描述与行对应的事件。 可能的值包括:
|
| 有趣性 | 该行是否被视为有趣。 只有有趣的行才会显示在“有趣的 XAML 帧”视图中。 |
| 持续时间(毫秒) | 行持续时间。 从启动和停止事件中计算得出。 |
| 权重 (ms) | 与持续时间对应的实际 CPU 执行时间。 |
| 启动 (s) | 启动事件的时间 |
| 停止 (s) | 停止事件的时间 |
列可以按类型或持续时间进行排序,以帮助识别潜在问题,例如跟踪中最昂贵、持续时间最长的帧(请参阅下图)。 您还可以深入分析特定行,以确定消耗资源的操作和潜在的优化。