本主题介绍如何使用 Windows Performance Toolkit 中的性能监视工具为 WinUI 应用程序生成深层性能配置文件。
如何使用 Windows Performance Recorder 监视 WinUI 应用?
Windows Performance Recorder (WPR) 可用于根据内置配置文件创建系统与应用程序行为和资源使用情况的详细 Windows 事件跟踪 (ETW) 记录。 然后,Windows Performance Analyzer (WPA) 可以处理这些 ETW 记录,以生成一组图形和表,可方便使用并深入分析 CPU 使用率、电源问题、系统或应用程序性能不佳以及其他性能问题。
注意
虽然 WPR 有 GUI 和命令行版本,但本主题仅提及 GUI 版本(有关这两个版本的更多详细信息,请参阅 WPR 简介)。
WPR 配置文件
WPR 配置文件用于收集有关应用的各个方面和行为的信息。
下图显示 Windows Performance Recorder 窗口,其中选择了“CPU 使用率”配置文件(系统上每个 CPU 的 CPU 使用率)和“XAML 活动”配置文件(XAML 相关提供程序中的事件,如 WinUI)。
如何将 Windows Performance Analyzer 与 WinUI 应用配合使用?
WinUI 是声明性保留模式 API,其中应用描述 UIElements 树,WinUI 运行布局并呈现布局。 这在 UI 线程上以称为“帧”的批处理方式完成,最好在显示的一个刷新间隔内快速完成。 当帧运行时间较长时,不仅会延迟其显示更新,而且还会阻止 UI 线程处理输入。 帧速慢虽然不是响应问题的唯一原因,但也是最常见的原因之一。
安装“XAML 帧分析”插件
WinUI 记录跟踪每个帧的开始和停止的 ETW 事件(如以下 WPA“泛型事件”表的屏幕截图所示)。 但是,由于需要手动计算每个帧的持续时间,因此很难识别帧出现缓慢的情况。
若要解决此问题,Windows Assessment Toolkit (ADK) 预览版(内部版本 26020 及更高版本)随附了新的“XAML 帧分析”表插件。 此表计算并显示每个帧的持续时间(以及其他耗时的操作)。
注意
虽然只有 Windows Performance Analyzer (WPA) 的预览版具有“XAML 帧分析”表,但用于跟踪的 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) | 停止事件的时间 |
列可以按类型或持续时间进行排序,以帮助识别潜在问题,例如跟踪中最昂贵、持续时间最长的帧(请参阅下图)。 还可以向下钻取到特定行,以确定昂贵的操作和潜在的优化。