此页面有用吗?
您对此内容的反馈非常重要。 请告诉我们您的想法。
更多反馈?
1500 个剩余字符
导出 (0) 打印
全部展开

如何:使用 Windows Phone 性能分析标识和修复常见的性能问题

2012/2/9

您可以使用 Performance Analysis 工具发现应用程序的性能问题。在 Performance Analysis 工具中的时间线上突出显示某个感兴趣部分(例如 CPU 使用量较高或帧速率较低的区域)后,将出现详细的性能分析部分。Performance Analysis 工具中的许多性能警告使调查问题的过程变得非常简单。例如,“操作(而非帧绘制)的 CPU 使用量较高”表示您需要采取措施来取消阻止 UI 线程或解除其负担,以便使其更好地处理帧绘制。但是,其他警告并非如此明显。本主题介绍如何使用 Performance Analysis 工具来发现和修复一些常见的性能问题。

本节介绍如何发现和修复与动画相关的常见性能警告。

高频缓存因缓存 UI 元素动画而无效

如果元素的缓存版本过时,缓存便会无效。之所以出现缓存无效,是因为应用程序状态的更改影响了元素应在屏幕上显示的方式。当出现此类更改时,UI 元素及其所有子元素必须重绘以反映状态更新。另外,还请务必注意,在动画运行期间,每个帧都会发生更新。由于更新如此频繁,因此由动画所导致的更新应仅限于必要的 UI 元素,这一点很重要。

调查高缓存无效警告

  1. 单击“性能警告”旁边的箭头,然后选择菜单中的“帧”

    随即会显示时间线中选定时段呈现的所有帧列表。

  2. 单击“CPU 时间”列标题,直至按降序(从最高到最低)排列值。

    这样可以显示出使用大量 CPU 资源的帧,并指明缓存频繁无效的可能性很大。

  3. 选择 CPU 使用量最高的帧。

  4. 在选定 CPU 使用量最高的帧之后,单击“帧”旁边的箭头,然后选择“缓存更新”

    “度量时间”“排列时间”“纹理更新时间”最高的 UI 元素便是该帧呈现时所更新的元素。如果这些列的值较高,则表示会出现缓存无效的情况。

  5. 返回至“帧”视图,然后选择 CPU 使用量最高的帧。

  6. 单击“帧”旁边的箭头,然后选择菜单中的“帧 {x} 的可视化树”

    随即会显示帧呈现时的可视化树以及每个 UI 元素的资源使用情况。

  7. 单击“总绘制时间 (incl)”列标题,直至按降序排列值。

    该帧更新期间呈现时间最长的 UI 元素将位于顶部。可视化树层次结构中列出了元素以及呈现每个 UI 元素及其所有子元素所花费的毫秒数。若要确定哪种元素导致您在“缓存更新”报告中找出的元素频繁无效,请查找其子元素占用绘制时间比例不大的元素。这表示父元素导致了呈现延迟。

本节介绍如何发现和修复一些与 UI 无响应相关的常见性能警告。

操作(而非帧绘制)的用户界面线程 CPU 使用量为中/高

如果看到“操作(而非帧绘制)的用户界面线程 CPU 使用量为中/高”性能警告,则表示您可能需要取消阻止 UI 线程或解除其负担。在执行此操作后,便能够使 UI 线程更好地处理帧绘制。重新编写代码以提高效率可能会有所帮助,但最佳的解决方案是将所有与 UI 元素没有直接交互的操作移至其自身的线程中。这样,非 UI 操作便不会在 UI 线程中创建积压工作,而 UI 线程则只负责尽可能高效地呈现用户界面。有关 Windows Phone 应用程序中的线程的更多信息,请参阅 Windows Phone 应用程序中的性能注意事项中的“了解线程”部分。

注意注意:

由于 Performance Analysis 工具将执行动画视为帧绘制操作,因此与动画相关的代码不会导致此特定性能警告。

调查 UI 线程中 CPU 使用量较高的情况

  1. 若要调查有关 CPU 使用量较高的警告,请单击“性能警告”旁边的箭头,然后依次单击菜单中的“帧”“功能”

    随即会显示“功能”视图。“功能”视图显示在时间线的选定部分调用的各个方法。这些方法可能是以平台代码或应用程序代码编写的。

  2. 单击“非独占示例”列标题,直至这些值按降序(从最高到最低)排列功能。

  3. 在该列表的顶部查找您的应用程序代码中所包含的方法。

    应用程序中的一个或多个方法可能会作为高度采样的功能列在顶部。这可能意味着您调用该方法非常频繁、该方法的效率可能较低,或者该方法可能需要花费较长时间才能成功执行。无论属于哪种情况,都会导致引发应用程序响应问题的 UI 阻塞。

  4. 优化该方法的代码或将其移至非 UI 线程。

由于重绘内容所致的 CPU 使用量较高的问题

您可能会看到性能图中的一些区域指示 CPU 使用量较高以及帧速率可能较低。下图便显示了这种情况的一个示例。

有两个警告指示内容重绘太频繁的问题,这可能会导致用户界面 (UI) 进行响应。

重绘内容的 CPU 使用量较高导致帧速率较低

指示 UI 元素没有自动缓存。这通常是因为可视化树(UI 元素的层次结构)过于复杂。解决方案可简化可视化树,或者可以减少动画运行期间针对可视化树中每个元素运行的代码数量。

重绘内容时 CPU 使用量较高

指示 UI 元素没有自动缓存。这通常是因为可视化树(UI 元素的层次结构)过于复杂。解决方案可简化可视化树,或者可以减少动画运行期间针对可视化树中每个元素运行的代码数量。

调查由于重绘内容所致的 CPU 使用量较高的情况

  1. 单击“性能警告”旁边的箭头,然后选择菜单中的“帧”

    随即会显示时间线中选定时段呈现的所有帧列表。

  2. 单击“CPU 时间(毫秒)”列标题,直至按降序(从最高到最低)排列值。

    这样可以显示出在呈现时最依赖 CPU 的帧。

  3. 选择 CPU 时间最高的帧。

  4. 在选定 CPU 时间最高的帧之后,单击“帧”旁边的箭头,然后选择“帧 {x} 的可视化树”

    随即会显示帧呈现时的可视化树以及每个 UI 元素的资源使用情况。

  5. 单击“总绘制时间 (incl)”列标题,直至按降序排列值。

    通过在可视化树层次结构中观察呈现每个 UI 元素及其所有子元素所花费的毫秒数,您可以确定在该帧更新期间呈现时间最长的 UI 元素。

  6. 查找绘制时间较长且包含多个子元素的元素。此类元素表示存在一定问题,您应该考虑简化该元素的可视化树。

    如果您简化此元素的可视化树,则意味着在帧重绘期间只需更新和缓存较少数量的元素。

  7. 搜索在更新、处理或显示元素时运行的任意代码的解决方案,并在找到后搜索可以省略或提高效率的占用大量 CPU 的操作。如果无法执行此操作,请考虑将这些功能的执行移至您自己创建的线程(而不是 UI 线程)中。

Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2015 Microsoft