Unity性能分析(三)内存分析

Unity中有两种分析内存的方法:

  • Memory Profiler :内置的分析器,提供内存使用的基本信息。
  • Memory Profiler package:将package添加到项目中,更详细地分析内存使用情况。可以存储和比较快照查找内存泄漏,查看内存布局以查找内存碎片问题。

确定物理RAM限制

每个目标平台都有一个内存限制,以此为应用程序设置一个内存预算。使用内存分析器查看捕获的快照。硬件资源(下图)显示RAM和VRAM的大小。这个数字不是基于真实统计的,不是所有空间都可用于使用,它只提供了一个基准数字。

为每个目标平台的确定最低支持规格

为每个平台确定RAM最低规格的硬件,来指导内存预算。请记住,并不是所有的物理内存都可用。考虑使用一个百分比(例如80%)来进行内存分配。对于移动平台,还可以考虑将规格分成多个层次,以支持高端设备获得更好的品质。

内存分析器模块的简单和详细视图

内存分析器模块提供两个视图:简单视图和详细视图。使用简单视图获得内存使用情况的总览图。必要时,切换到详细视图进行深入分析。

使用内存分析器快速收集与资源和场景对象内存分配相关的信息

简单视图

Total Used Memory是Unity跟踪的总内存,不包括Unity保留的内存(Total Reserved Memory)。系统使用内存是操作系统认为应用程序正在使用的内存。如果此数字始终显示为0,这表示Profiler计数器在当前正在分析的平台上没有实现。在这种情况下,最好依赖Total Reserved Memory。同时建议切换到本平台的分析工具以获取详细的内存信息。

详细视图

如果要查看可执行文件、DLL和Mono虚拟机使用了多少内存,逐帧查看内存数据是不够的。使用详细快照来深入分析内存分布。

使用捕获的样本分析详细信息,例如可执行文件和DLL的内存使用情况

使用Memory Profiler package进行深入分析

Memory Profiler package可用于进行更详细的内存分析。使用它来存储和比较快照,以查找内存泄漏或查看内存布局以找到优化方向。 Memory Profiler package的一个巨大优势是,除了捕获本机对象,它还允许查看托管内存,保存和比较快照,并以更详细的方式浏览内存,以可视化内存使用情况。

Memory Profiler主视图

另外,也可以使用内存分析器模块中的详细视图来深入了解内存树,找出使用最多内存的内容。

内存分析器的许多功能已被Memory Profiler package取代,但仍然可以使用它辅助内存分析。 例如:

  • 查找GC分配
  • 快速查看堆的使用/保留大小(较新版本的内存分析器)
  • 着色器内存分析(较新版本的内存分析器)

在分析内存时需要考虑以下一些要点:

质量级别、图形层和AssetBundle变量等设置可能在高端设备上具有不同的内存使用情况。例如:

  • 质量级别和图形设置可能会影响shadow map的RenderTextures的大小。
  • 分辨率缩放可能会影响屏幕缓冲大小、RenderTextures和后处理效果。
  • 纹理质量设置可能会影响所有纹理的大小。
  • 最大LOD可能会影响模型等。
  • 如果您有类似于高清(High Definition)和标准(Standard Definition)版本的AssetBundle变量,并根据设备规格选择使用,也可能会获得不同的资源大小。
  • 目标设备的屏幕分辨率将影响用于后处理效果的RenderTextures的大小。
  • 设备的图形API可能会影响着色器的大小,这取决于API对其变体的支持情况。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章