Unity 内存性能分析器 (Memory Profiler)
这篇笔记整理了 Unity 官方内存分析工具 Memory Profiler 的基础用法: 如何安装、如何抓取快照(Snapshot)、在单帧视图中定位大内存对象, 以及用「两帧对比」来排查内存泄漏和引用异常。
适用场景:项目出现内存持续增长、真机打包后偶发崩溃、或需要梳理资源占用情况时。
一、安装 Memory Profiler
Memory Profiler 以 Package 的形式提供,一般有两种安装方式:
-
通过包名添加
- 打开
Window → Package Manager; - 选择
Add package by name...; - 输入包名:
com.unity.memoryprofiler,点击确认。
- 打开
-
在 Unity Registry 中搜索
- 同样在 Package Manager 中,左上角选择
Unity Registry; - 搜索
Memory Profiler; - 选中后点击
Install安装。
- 同样在 Package Manager 中,左上角选择
安装完成后,菜单中会多出一项 Memory Profiler。
二、打开与抓取快照
菜单路径:Window → Analysis → Memory Profiler

打开界面后,你可以:
- 连接 真机 或直接在 Editor 中运行游戏;
- 点击 Capture 按钮,对当前时刻进行抓帧;
- 每次抓取会在本地生成一个
*.snap文件,记录这一帧的内存状态。

在 Memory Profiler 窗口中,点击某个 Snapshot,即可进入详细分析界面。
三、单帧分析:查大对象与碎片
单帧分析的典型用途:找出占用异常的资源或对象。
1. Tree Map 视图
在 Tree Map 页签中,可以看到按类别划分的内存占用:

- 上方是不同类型(Texture2D、Mesh、AnimationClip、ComputeShader 等)的占用概览;
- 下方列表按 Size 排序列出具体对象;
- 可以快速找到「贴图过大」「某个 Mesh 占用异常」等问题。
2. Fragmentation 视图
当你怀疑存在内存碎片或堆分布异常时,可以切到 Fragmentation 页签:

- 不同颜色表示不同类型的内存区域(托管堆、原生内存、保留区等);
- 点击某一块区域,下方会显示这段地址空间的详细信息;
- 方便你判断是否存在大量未释放的小块内存,或某类分配异常。
四、两帧对比:排查内存泄漏
Memory Profiler 中的 Compare Snapshots 功能适合用来查内存泄漏。
常见做法:
- 在「正常状态」下抓一帧 Snapshot A;
- 运行一段时间或执行某个操作(如多次加载场景)后,抓一帧 Snapshot B;
- 在 Memory Profiler 中勾选这两个 Snapshot,点击 Compare Snapshots。
1. Summary 页签
在 Summary 汇总页,可以整体对比两帧:

- 查看总内存、托管堆、贴图、Mesh 等模块是否出现异常增长;
- 对比 A、B 两帧之间的差值,锁定问题大类。
2. Objects and Allocations 页签
更细节的排查在 Objects and Allocations 页签进行:


常用筛选方式:
- 将筛选模式切成
Diff,再设置为Match → New,只看「新出现」的对象; - 按
Size排序,优先关注体积较大的条目; - 通过
Type、Name初步判断可能的问题对象; - 打开
Referenced By/References To面板,沿引用链查是谁在持有这些对象。
这样可以比较系统地定位:
- 没有被释放的
GameObject、Texture、Mesh; - 某些静态字典、单例或事件注册导致的「意外引用」。
五、小结:Memory Profiler 能帮你做什么?
Memory Profiler 是一款非常实用的内存分析工具,尤其适合:
-
排查资源问题
找出贴图、模型、音频等大体积资源,判断是否需要压缩、降分辨率或拆分。 -
定位内存泄漏
利用两帧对比,发现运行一段时间后才出现、且不会回收的对象。 -
分析引用关系
通过引用链视图(Referenced By / References To),弄清楚「为什么这个东西一直在内存里」。
在 Unity 项目的性能优化工作中, 学会使用 Memory Profiler 是非常关键的一步:只有看得见问题,才谈得上优化。
版权声明:本文最初发布于 CSDN「uniGame」,遵循 CC 4.0 BY-SA 协议,转载请附上原文链接及本声明。
原文链接:https://blog.csdn.net/alla_Candy/article/details/133272285