使用 CPU 分析器一个帮助您优化游戏的窗口。它显示了在游戏各个区域花费的时间。例如,它可以报告渲染、动画或游戏逻辑中花费的时间百分比。 更多信息
请参阅 词汇表 模块,全面了解您的应用程序在 CPU 上花费的时间。
CPU 使用情况分析器模块概述了应用程序花费时间的地方,例如渲染、其 脚本一段代码,允许您创建自己的组件、触发游戏事件、随着时间的推移修改组件属性并以您喜欢的任何方式响应用户输入。 更多信息
请参阅 词汇表 和动画。它在窗口顶部以图表形式显示此信息。您可以选择单个帧以在时间线中检查数据,或在 分析器窗口 下半部分的详细信息窗格中选择各种层次结构视图。
CPU 使用情况分析器模块以时间线视图或不同的层次结构视图显示分析数据。以下视图可用
要更改视图,请使用分析器窗口下半部分的 下拉视图选择器。
时间线视图是 CPU 使用情况分析器模块的默认视图。它包含应用程序花费时间以及这些时间如何相互关联的概述。它在同一时间轴上显示来自所有线程的性能数据及其各自的子部分。
使用时间线视图了解不同线程上的活动在并行执行中如何相互关联。时间线视图还显示了应用程序使用不同线程的程度,例如 作业系统 的工作线程。它还指示线程上的工作是如何排队的,以及是否有任何线程处于空闲状态 (空闲样本) 或等待另一个线程或作业完成 (等待 x 样本)。
层次结构视图一次显示一个线程的分析数据,默认情况下为主线程。这些视图仅显示样本的持续时间,而时间线视图显示每个样本发生的具体时间。
层次结构视图列出了您分析的所有样本,并根据其共享调用堆栈和 分析器标记放置在代码中以描述然后在 Unity 分析器窗口中显示的 CPU 或 GPU 事件。默认情况下添加到 Unity 代码中,或者您可以使用 ProfilerMarker API 添加您自己的自定义标记。 更多信息
请参阅 词汇表 的层次结构将它们分组在一起。原始层次结构视图不会将样本分组在一起,这使其成为以细粒度查看样本的理想选择。
反向层次结构视图按分析器标记对样本进行分组,并以反向样本堆栈的形式显示它们。层次结构的第一级为每个分析器标记显示一个项目。树中的每个子项代表反向样本堆栈的一部分,其数据显示了通过该样本堆栈对聚合的父项贡献了多少时间或堆内存。
反向层次结构视图有助于揭示由大量小性能影响实例引起的大型性能问题。在时间线或非反向层次结构视图中,很难发现这类问题。
分析器标记 发出分析器用于将分析信息显示并组织到不同的时间顺序和层次结构视图中的样本集。分析器窗口显示的所有样本都是样本堆栈的一部分。
样本堆栈不同于方法的调用堆栈,因为 Unity 不会将每个样本绑定到特定方法,并且不会将每次调用记录为样本。 深度分析 在每个函数调用中添加分析器标记,但不会为本机代码添加任何标记,并且记录这些样本会带来很大的开销。
您可以使用 CPU 使用情况分析器模块检查 `GC.Alloc`、`UnsafeUtility.Malloc` 和 `JobHandle.Complete` 发出的样本的完整调用堆栈。如果您想跟踪这些样本的发生位置,而无需启用深度分析并遇到其高开销,这非常有用。有关如何启用调用堆栈的信息,请参阅 启用完整调用堆栈。
您还可以使用 CPU 分析器来调查 Unity 在哪里执行了内存清理。
每当您的代码创建一个新的托管对象时,都有可能它无法适应当前内存堆,而 Unity 执行 垃圾回收。垃圾回收会暂停所有线程并扫描托管堆以查找未使用的内存。此过程可能需要很长时间,并会中断帧速率。托管垃圾回收在分析器中显示为 `GC.Collect` 样本,而托管分配显示为 `GC.Alloc`。
为了防止垃圾回收器影响应用程序的帧速率,请尝试在应用程序运行时将 `GC.Alloc` 值保持为零,并保持堆大小较小。在 时间线视图 中,`GC.Alloc` 样本以红紫色显示,并表示分配的大小。
要了解托管分配发生在代码中的位置,您可以启用 `GC.Alloc` 的完整调用堆栈。有关托管堆的更多信息,请参阅有关 托管内存 的文档。