本页内容简介:了解如何使用 Unity Profile Analyzer 查看资源或代码更改、优化工作、设置修改或 Unity 版本升级的影响。本文基于 Lyndon Homewood 在 Unite Copenhagen 2019 上的演讲。
Profile Analyzer 概述
您想知道应该将性能调校工作的重点放在哪里吗?您需要比较更改前后的性能吗?您是否知道 Unity 版本更新对游戏的影响?Performance Analyzer 可帮助您获得此类概述。
该工具可帮助您确定工作重点,并为您提供了一种比较两个 Unity 性能捕获和查看更改影响的方法。该工具提供了直观的表示形式,可帮助您了解所做的更改对性能的影响。
Profile Analyzer 汇总并可视化来自一组 Unity Profiler 帧的帧和标记数据,帮助您推断它们在许多帧的行为,对 Unity Profiler 中已经可用的单帧分析进行补充。
Profile Analyzer 对多个帧进行 CPU 性能分析。该工具带有统计信息和可视化效果,可帮助您快速消化这些信息。它还支持全面筛选,因此您可以深入了解感兴趣的部分。您可以使用它比较两个数据集,也可以导出数据以使用其他工具进行分析。
您可以将 2018.4 LTS+ 中的 Profile Analyzer 作为包使用,但也可以下载它,然后将其放入项目中。它适用于 5.6 及以后的任何 Unity 版本。要启动它,请转到 Window > Analysis > Profile Analyzer。对于较旧的 Unity 版本,您可以直接从“Window”菜单启动它。
性能分析技巧
以下是一些可帮助您开始使用 Profile Analyzer 的性能分析技巧:
- 获取有代表性的、可重复的捕获。
- 关闭所有其他应用程序。您可以在 C# 脚本中使用 Profile.logFile 直接从正在运行的游戏中写出性能数据,这意味着您无需打开 Editor。它会写出一个 .raw 文件,您随后可以将其加载到 Unity Profiler 中。
- 禁用 CPU 性能调节(例如 Intel SpeedStep 或 Turbo Boost 设置),以免时钟频率发生变化。
查看特定函数的性能
如果要了解调用函数对性能的影响,可以使用 Unity Profiler 捕获数据。然后,可以使用“Pull Data”按钮将其加载到 Profile Analyzer 中。或者,也可以加载以前保存的捕获。
执行上述操作后,分析将立即开始,并且数据将填充到帧时间图中。注意图中的白色和青色柱形。白色柱形代表帧持续时间,青色柱形代表当前选择的标记,因此您可以看到它们在帧时间中的占比。
您可以使用筛选器搜索标记。Marker Details 会自动更新以反映您选择的子集;在“Count”列中,您将看到它出现的次数。帧时间图将突出显示标记。选择标记后,“Marker Summary”也会更新。
查找有代表性的帧
When analyzing performance, you want to make sure that the data you’re looking at is representative. If your data is noisy, it’s easy to ensure that you select an average frame by using the Frame Summary at the top right – just click on the Frame shown as the Median and the Profiler will display the relevant analysis. Or, in the frame time graph, you can right-click and select Select Median Frame.
You can also limit your analysis to a selection of frames. All of the statistics you see will be updated to reflect the specific selection.
Rather than rely on a single data point from a single frame, you can analyze multiple data points by selecting a group of representative frames. If you right-click on the frame time graph and Order by Frame Duration, you can then select a set of frames around the median frame for a representative sample that smooths out some of the noise in your data.
更改项目设置的效果
在应用整个项目范围的设置(例如启用 Graphics Jobs)时,Profile Analyzer 可帮助您确定性能差异。要使用该功能,请进行基准捕获,然后在作出更改后进行另一次捕获。运行游戏,使用 Unity Profiler 对其进行采样,将捕获加载到 Profile Analyzer 中,然后载入第二个捕获。
您可以在“Frame Summary”部分中并排查看两次捕获的结果。
Are you GPU-bound?
要确保性能没有任何瓶颈,请检查 Gfx.WaitForPresent 标记。通过在筛选器区域中键入 Gfx.WaitForPresent 来找到它。如果该标记的中值不为零,说明 CPU 在等待 GPU 完成其活动,然后才能继续。
您可以在帧时间图中查看该标记,以了解它在帧时间中的占比。如果 CPU 在等待 GPU,则您的游戏很可能是 GPU 密集型的。请参阅 GPU 性能分析工具以进行一些优化。

数据集管理
您可以从 Profile Analyzer 主窗口的顶部部分管理数据。在这里,您可以打开 Unity Profiler,然后从 Unity Profiler 中“Pull Data”,或加载以前保存的文件(任何 Unity 版本)。
加载数据后,您将在帧时间图中看到它们。帧时间图是一个交互式区域,您可以在此处选择一系列样本;标记表中的所有摘要信息将自动更新以反映您的选择。您可以通过右键单击所做的选择来访问更多高级选项。
您可以单击“Save”按钮将分析数据保存为 .pdata 文件。注意,有两种保存文件 - Profile Analyzer 保存文件 (.pdata) 和 Profiler 保存文件(.data 或 .raw)。我们建议将两种文件保存在同一目录中。
帧摘要
Frame Summary 显示帧时间的重要信息(包括最小帧、最大帧和中间帧),并包含可以跳转到 Unity Profiler 中特定帧的按钮。此外,该区域还显示帧时间分布直方图以及盒须图。

标记表
标记详细信息
在该部分中,您可以找到 Unity Profiler 中标记数据的标记表,包括所有堆栈深度。汇总所有标记的 Unity Profiler 数据,以提供中间帧及其他帧时间,这些时间也显示在该表中。
标记摘要
右侧的“Marker Summary”区域包含有关所选标记及其在帧时间中的占比的汇总信息。该信息还以直方图和盒须图的形式进行视觉展示。
在摘要的底部,可以找到汇总数据集中各个标记实例的最短时间和最长时间。

筛选条件
- 按名称
要让视图集中显示具有特定名称的标记,可以键入子字符串或子字符串集合。如果名称中包含空格,请确保在子字符串两边加上引号。
您可以排除不感兴趣的标记。例如,您可以基于 Jobs 中的空闲时间排除标记,或排除 Profiler 本身的标记。
可以通过右键单击表中感兴趣的标记来填充筛选器。
- 线程
您可以选择查看特定工作线程的数据。要查看所有线程的汇总数据,请选中线程选择弹出窗口顶部的“All”。
- 深度
我们建议的查看深度为 3,因为大多数 Unity 子系统在该级别都具有高级标记。这样,您将看到关键子系统(例如渲染、动画和物理)的占比。(深度 3 适用于最新的 Unity 发行版。对于较旧的版本,您可能需要切换到其他深度。)
- 父项
要按父项进行筛选,请右键单击标记表中的标记,然后选择“Set as Parent Marker Filter”。
- 分析类型
默认情况下,Profile Analyzer 向您显示标记的总时间,但您可以更改为 Self 时间。如果您想深入了解时间到底花在了什么地方,则 Self 时间会很有用。
- 单位
默认单位是毫秒,但对于较小的时间,您可以切换到微秒。
排名前 10 的标记
排名前 10 的标记是根据您设置的条件筛选出的排名最靠前的 10 个标记。使用该工具的最佳方法是选择主线程和总时间(包括深度为 3 的子项),以便查看 Unity 子系统。这将为您显示每个此类关键系统的占比,例如渲染、物理、动画时间。要做进一步的报告和分析,可以将鼠标指针悬停在数据栏上以查看确切的百分比和指标。

比较数据集
在 Profile Analyzer 窗口的顶部,您可以切换到“Compare”选项卡来选择两个数据集进行分析。一个数据集显示为蓝色,另一个数据显示为橙色。或者,您也可以选择比较单个数据集的两个子区域,例如,将中间帧与离群帧进行比较。
“Marker Comparison”表以蓝色和橙色直观地表示数据,因此您可以快速了解两个数据集中的哪个在特定区域运行速度较慢。
如果其中一个扫描中没有标记,您将在该列中看到一个短划线。如果标记已重命名,例如您使用的是其他 Unity 版本,则可能发生这种情况。
导出数据
记住,您可以从 Profile Analyzer 导出数据以进行更多自定义处理。您可以导出标记表、帧时间图或帧时间图比较的内容。
如果您对 Profile Analyzer、Profiler 或如何在项目中使用其特定功能有任何疑问,请访问论坛加入讨论。