unity .3 使用Memory Profiler

时间:2024-03-06 12:48:23

1.介绍

  Memory Profiler允许分析项目的内存使用情况,以查找泄漏和碎片。内存泄漏可能发生在分配内存时,但在不再需要内存后未进行处理。随着内存耗尽,程序性能会恶化,最终导致程序(甚至主机设备)崩溃。当内存分配在许多小块中,而不是更少的大型连续块时,它被称为内存碎片。这将导致分配块之间的未分配内存小范围变得不可用。

  Memory Profiler是审核项目的内存使用情况的好方法。 您不仅可以查看消耗最大内存的内容,还可以查看项目使用或滥用内存的方式。 内存泄漏和碎片是影响项目性能的两个最常见的问题,并且Memory Profiler使解决这些问题变得容易。

  unity learn相关链接:https://learn.unity.com/tutorial/working-with-the-memory-profiler-2019-3?language=en#5e3064d6edbc2a6cb3b2b65e

2.安装内存探查器

  Unity 编辑器中package manager->advanced->show preview package->memory profiler->install. 

  安装完之后,应该可以在window中找到analysis->memory profiler 。

3.获得内存snapshot

  Memory Profiler可以在本地计算机上或为它提供联网计算机的特定IP地址,以当前正在运行的开发版本为目标。
  1.必须先选择一个目标,然后才能捕获内存快照。 默认情况下,Unity编辑器是目标。
  2.要选择一个新目标,请单击Memory Profiler左上角的下拉菜单。

  单击capture按钮,以从选定目标中捕获当前的内存配置文件。 注意capture本身会消耗一些内存。 在某些情况下,这可能会导致目标在内存不足时冻结或崩溃。

  Memory Profiler可以针对本地或网络构建的开发,Unity编辑器或Bitbucket Profiler中的内存情况。

  单击“ Memory Profiler”窗口顶部的“import”按钮。

  使用“Import snapshot file”对话框右下角的文件格式下拉列表,选择要导入的内存快照的格式。 选项包括使用Memory Profiler捕获的.snap文件和使用Bitbucket Memory Profiler捕获的.memsnap *。

  找到并选择你的snapshot。 单击打开。
  第一次捕获内存快照时,将创建一个名为MemoryCaptures的文件夹(位于Assets文件夹的同一级别,而不是在其中)。 您也可以将“内存快照”放到该文件夹中以使其可访问。

4.查看 memory snapshot

  捕获或导入后(包括将快照移动到MemoryCaptures文件夹中),快照将在Memory Profiler窗口的左列中可见。 单击“打开”以查看“内存配置文件”

 

  默认和最直观的视图是树形图(下图)。 在此视图中,每种元素类型使用的内存量均按比例表示。 在我们的示例中,126个着色器共同消耗80 MB的内存。

   要更详细地查看类别,请单击该类别以显示所有成员元素及其各自的内存占用量。 更详细的信息将在表格的树形图下方显示。 单击标题以按值或组对表进行排序。

 

 

 位于树图和内存图下方的表格视图提供了有关各个元素的内存使用情况的更详细信息。更为直接的视图“memory map”以不同的颜色显示内存布局

代表不同类型的内存。 这对于查找内存碎片很有帮助。

“memory map”是项目虚拟内存布局的更直接表示。

5.找到内存泄漏

1.启动播放器,将其设置为Memory Profiler目标,并拍摄一个空场景的快照。
2.加载要测试的场景。 播放一些场景以加载必要的资产。
3.通过调用Resources.UnloadUnusedAssets()或两次加载/创建一个空场景来卸载场景。
4.拍摄另一个快照,然后退出播放模式。
5.在工作台中,加载第一个屏幕截图,然后加载第二个屏幕截图,然后单击“diff”。 Unity将计算两个屏幕截图之间的差异。 这可能需要几秒钟,具体取决于snapshot的大小。
6.在“table”视图中,单击“diff”列的标题,然后选择group。
7.entries将被分组:两个快照中的条目相同,从第一个快照中删除,然后新建。 new entries是潜在的内存泄漏。