分析应用商店应用中的 UI 响应能力 (XAML)
使用适用于应用商店应用的**“XAML UI 响应能力”**探查器,可以找到并解决与 XAML 处理和呈现相关的性能问题。 此工具可帮助你分析启动和导航时间长、平移和滚动不均匀、用户输入处理延迟等问题。
备注
你可以收集并分析 CPU 使用量数据和能量消耗以及 XAML UI 响应能力数据。请参见从“性能和诊断”页运行分析工具
内容
用用户标记标识方案
收集应用程序的 UI 响应能力数据
收集已安装的应用程序的 UI 响应能力数据
分析 UI 响应能力数据
优化 XAML 响应能力
用用户标记标识方案
可以向分析数据添加“用户标记”以帮助标识时间线标尺中的区域。
每次执行此方法时,标记将显示为时间线中的橙色三角形。 将鼠标指针悬停在该标记上时,将以工具提示的形式显示消息和时间。 如果有两个或更多个用户标记靠近在一起,则将合并这些标记,而且还将组合工具提示数据。 可以放大时间线来分隔标记。
若要向 C#、Visual Basic、C++ 代码添加标记,请先创建一个 Windows.Foundation.Diagnostics LoggingChannel 对象。 然后在代码中要标记的位置插入对 LoggingChannel.LogMessage 方法的调用。 在该调用中使用 LoggingLevel.Information。
执行此方法时,用户标记将与消息一起添加到分析数据中。
备注
-
Windows.Foundation.Diagnostics.LoggingChannel 将实现 Windows.Foundation.IClosable 接口(在 C# 和 VB 中为 System.IDisposable)。若要避免操作系统资源泄露,请在完成日志记录通道时调用 Dispose()。
-
每个打开的日志记录通道都必须具有唯一的名称。尝试使用与未释放的通道相同的名称创建新的日志记录通道将导致异常。
有关示例,请参见 Windows SDK 示例 LoggingSession 示例。
收集应用程序的 UI 响应能力数据
可以在 Visual Studio 设备、Visual Studio 模拟器或仿真程序,或者远程设备上分析应用的响应能力。 请参见从 Visual Studio 运行应用商店应用。 以下是基本步骤:
从调试器的“标准”工具栏上的**“启动调试”**按钮旁的下拉列表中选择要运行应用程序的位置。
在 Visual Studio 计算机之外的平板电脑或 PC 上进行分析时,请配置要远程分析的项目。 请参见在远程计算机上从 Visual Studio 运行 Windows 应用商店应用
在**“调试”菜单上,选择“性能和诊断”**。
选择**“XAML UI 响应能力”,然后选择“启动”**。
备注
当你启动“XAML UI 响应能力”探查器时,可能会看到一个“用户帐户控制”窗口,要求你提供运行 VsEtwCollector.exe 的权限。选择“是”。
运行你的应用以收集数据。
提示
直接在设备上运行应用程序。在模拟器上或通过远程桌面连接观察到的应用程序性能并不能指示设备上的实际性能。
若要停止分析,请切换回到 Visual Studio (Alt + Tab) 并在**“性能和诊断”页面上选择“停止收集”**。
Visual Studio 将分析收集的数据并显示结果。
收集已安装的应用程序的 UI 响应能力数据
“XAML UI 响应能力”探查器只能在从 Visual Studio 解决方案启动或从 Windows 应用商店中安装的 Window 8.1 应用程序上运行。 在 Visual Studio 中打开解决方案时,默认目标为“启动项目”。 可以在不带打开的解决方案的本地设备或远程设备上分析已安装的应用程序的 XAML 响应能力。
面向已安装的应用程序:
选择**“更改目标”,然后选择“已安装的应用程序”**。
**远程分析。**若要在远程设备上运行 XAML 响应能力探查器,则必须在设备上安装并运行 Visual Studio 远程工具。 请参见在远程计算机上从 Visual Studio 运行 Windows 应用商店应用。
在**“选择已安装的应用程序包”对话框中,选择“远程计算机”**,然后指定远程设备。
从**“为当前会话安装的应用程序包”**列表中选择目标应用程序。
选择“性能和诊断”页面上的**“XAML UI 响应能力”**。
选择**“启动”**开始分析。
若要停止分析,请切回到 Visual Studio (Alt + Tab) 并在“诊断中心”页面上选择**“停止收集”**。
分析 UI 响应能力数据
Diagnostic session timeline**|UI Thread utilization|Visual throughput (FPS)|Parsing view|**Hot Elements view
收集分析数据之后,可以按照以下步骤开始分析:
检查**“UI 线程使用率”和“可视吞吐量(FPS)”**图中的信息,然后使用时间线导航栏选择要分析的时间范围。
使用**“UI 线程使用率”或“可视吞吐量(FPS)”图中的信息,检查“分析”或“热元素”**视图中的详细信息可以发现导致任何明显缺少响应能力情况的可能原因。
诊断会话时间线
**“性能和诊断”页面顶部的标尺将显示已分析信息的时间线。 此时间线适用于“UI 线程使用率”图和“可视吞吐量”**图。 你可以通过拖动时间线上的导航栏选择一段时间线,缩小报告的范围。
时间线还显示已插入的任何用户标记和应用程序的激活生命周期事件。
UI 线程使用率
**“UI 线程使用率(%)”**图显示在这些类别的 UI 线程上所花费的相对时间量:
分析 |
指示在 UI 线程分析 XAML 和检索应用程序资源上所花费的时间。 |
布局 |
指示在 UI 线程设置 XAML 元素布局上所花费的时间。 |
应用程序代码 |
指示在与分析或布局无关的 UI 线程执行应用程序(用户)代码上所花费的时间。 |
Xaml 其他 |
指示在 UI 线程执行 XAML 运行时代码上所花费的时间。 |
可视吞吐量 (FPS)
**“可视吞吐量(FPS)”**折线图显示了应用程序的 UI 线程和复合线程上的每秒帧数 (FPS)。 这些是你在启用 EnableFrameRateCounter 后将会在应用程序的镶边中看到的值。
“分析”视图
**“分析”**视图包含在时间线的选定部分加载和处理的 XAML 文件的水平条形图。 XAML 文件节点的子级为此节点文件包含的文件。 节点按加载顺序列出。 详细信息窗格将显示所选文件的以下值。
非独占和独占值
独占持续时间 |
处理此节点中显式定义的元素所花费的时间。 |
非独占持续时间 |
处理此节点和所有子节点中定义的元素所花费的时间。 |
用户界面元素(独占) |
此节点中显式定义的元素的数目。 |
用户界面元素(非独占) |
此节点和所有子节点中显式定义的元素的数目。 |
“热元素”视图
**“热元素”**视图包含一个水平条形图,其表示时间线选定部分期间参与布局的所有元素。 这些元素按模板分组,并按布局所用时间进行降序排列。
一个元素节点的子级为此父节点元素中包含的元素。 子节点也按照布局时间进行排序。 详细信息视图将显示所选元素的名称和时间值。
优化 XAML 响应能力
若要查找有关优化应用程序性能的信息,最佳去处莫过于Performance best practices for Windows Store apps using C++, C#, and Visual Basic中的主题。
下面是关于优化 XAML 性能的一些观点:
优化启动和页导航
通过仔细检查页面加载的 XAML、资源和数据文件,可以加快应用程序的启动和页导航速度。 如果 XAML 文件在页面首次加载时创建或引用大量不必要的 UI 元素,加载的资源文件引用不适用于当前页面的模板和样式,或者相同的 XAML 或资源文件加载了不止一次,你的应用程序可能会很慢。 有关解决这些问题的方法,请参见以下主题之一:
Optimize loading XAML (Windows Store apps using C#/VB/C++ and XAML)
Minimize startup time (Windows Store apps using C#/VB/C++ and XAML)
Access the file system efficiently (Windows Store apps using C#/VB/C++ and XAML)
优化平移和滚动
不使用虚拟化容器、模板大而复杂或者自定义每帧回调方法中算法效率低下,均可导致平移和滚动性能问题。 有关解决这些问题的方法,请参见以下主题之一:
优化输入响应能力
有关解决这些问题的方法,请参见Keep the UI thread responsive (Windows Store apps using C#/VB/C++ and XAML)