Version: 6000.3
语言: 中文
配置垃圾回收
避免 C# 反射开销

跟踪垃圾回收分配

Unity 有以下工具来跟踪内存分配:

使用 CPU 使用率模块跟踪分配

若要使用 CPU 使用率探查器模块跟踪垃圾回收分配,请执行以下步骤:

  1. 打开“分析器”窗口(“分析>”窗口>“分析器”)。
  2. 收集一些性能数据
  3. 在“CPU 使用率”中选择一帧分析器帮助您优化游戏的窗口。它显示了在游戏的各个领域花费了多少时间。例如,它可以报告渲染、动画制作或游戏逻辑所花费的时间百分比。更多信息
    请参阅术语表
    模块。
  4. 在模块详细信息窗格中,打开“层次结构”视图,然后检查 GC。Alloc 列。

GC.Alloc 列显示 Unity 在托管堆上为所选帧和线程分配的字节数。

分配可以发生在所有线程上,因此您可能希望使用线程选择下拉列表来签出主线程以外的其他线程。您还可以使用时间轴视图并留意GC.Alloc样品,颜色为明亮的洋红色。

提示:使用调用堆栈模式启用完整的调用堆栈跟踪GC.Alloc样品。调用堆栈为您提供垃圾回收器进行分配的位置的精确详细信息,而无需使用深度分析模式,这可能会影响性能。

使用内存模块跟踪分配

您可以使用内存分析器模块来跟踪垃圾回收内存分配,但它仅提供 Unity 分配内存位置的高级概述。有关应用程序中内存使用情况的详细信息,请使用 Memory Profiler 包

若要使用内存探查器模块跟踪垃圾回收内存分配,请执行以下步骤:

  1. 打开“分析器”窗口(“分析>”窗口>“分析器”)。
  2. 收集一些性能数据
  3. 在内存性能分析器模块中选择一个帧。
  4. 在模块详细信息窗格中,检查帧统计信息中分配的 GC

托管堆统计信息显示垃圾回收器管理的内存量,其中包括 Unity 可能在后续帧中分配和重用的内存。这意味着GC.Alloc所有帧的样本并不总计托管内存在该时间内增长了多少。

帧统计信息中分配的 GC 会减少在此帧中分配的内存量。此数量可能高于 GC 中显示的 CPU 使用率模块。Alloc 列。这是因为GC.Alloc统计数据包括跨所有线程以及仅编辑器样本中的分配,或作为EditorLoop.Hierarchy 视图一次仅显示一个线程,默认情况下隐藏在 Editor only 示例中进行的分配,并折叠作为EditorLoop除非性能分析器针对的是编辑器而不是播放模式。

重要:要获得最准确的信息,请开发版本开发版本包括调试符号并启用分析器。更多信息
请参阅术语表
在要构建到的目标平台或设备上。Unity 编辑器的工作方式与构建不同,这会影响分析数据。例如,GetComponent方法在编辑器中执行时始终分配内存,但在构建的项目中不分配内存。

其他资源

配置垃圾回收
避免 C# 反射开销