9.Unity性能分析工具-初识MemoryProfiler窗口
9.1 知识点
Memory Profiler Package是什么
Memory Profiler Package(内存分析器包)是 Unity 提供的一个独立内存分析工具。它可以用于检查 Unity 应用程序以及 Unity 编辑器的内存使用情况,我们可以用它来捕获、检查、比较内存快照(Snapshot)。
它获取的是某一时刻的全局内存情况:抓一张“当前内存照片”,然后你可以用它做对比、做追踪、做定位。
它和上节课的 Profiler > Memory 模块都能分析内存,但定位和深度不一样,大致对比如下:
| 对比项 | Profiler - Memory 模块 | Memory Profiler(独立工具) |
|---|---|---|
| 实时监控 | 支持 | 主要用于快照分析 |
| 适用阶段 | 开发中持续观察性能 | 排查具体内存泄漏 / 激增问题 |
| 查看细节 | 粗略数据(贴图、网格、GC 内存等) | 精细到对象引用关系、类型大小、堆分布等 |
| 是否支持快照对比 | 不支持 | 支持多个快照对比 |
| 是否能定位内存泄漏 | 部分可以推测 | 具备定位能力 |
| 是否支持深入引用链分析 | 不支持 | 支持(可一层层追踪对象如何被其它对象引用) |
| 性能开销 | 极小 | 略高(抓取快照时会卡顿) |
从对比中可以看出,Memory Profiler Package 具备更细致的内存问题定位能力,可以帮助我们更深入地排查问题。
总而言之:Memory Profiler Package 是一个比 Profiler 的 Memory 模块更细致的内存排查工具。
Memory Profiler Package对于我们的意义
它可以通过捕获不同时间点的内存快照并进行对比,来定位内存泄漏、资源未释放、异常增长等问题。
比如我们在做某些操作时,前后各抓一份快照来对比:
- 打开一个 UI 面板前后
- 运行 10 分钟前后
- 切换场景前后
- ……等
当我们想要:
- 详细对比两次运行之间的内存差异
- 知道到底是什么对象一直不释放
- 找出是哪段逻辑导致内存暴涨
- ……等
就可以使用 Memory Profiler Package 来做更深的排查。
总而言之:想要更深度地定位内存问题,可以用它;但实际开发里一般会配合上一节的 Memory 模块一起用:
- 先用
Profiler > Memory大概定位问题范围 - 再用 Memory Profiler 做详细排查
Profiler 是望远镜,Memory Profiler 是显微镜。
初识Memory Profiler
安装
打开 Profiler 窗口并选择 Memory 模块,可以看到安装按钮。安装完成后点击 Open Memory Profiler,就会弹出 Memory Profiler 窗口。
总体区域概览
A:顶部菜单B:当前选中内存快照(Single Snapshot / Compare Snapshots 的入口区域)C:内存快照列表。每获取一次快照,这里会新增一条快照记录D:快照详情区。没有选择快照时,中间会出现Capture New Snapshot(捕获新快照)按钮
顶部菜单
- 开/关左侧快照相关窗口
- 加载保存的内存快照
- 捕获内存快照(展开后可以选择要捕获的信息)
- 附加到应用程序(展开后可以选择要附加到的应用程序)
- 关闭右侧信息窗口
- 更多设置
三种页签概述
Summary:总结概要页签
- 主要显示快照中的内存总体信息,适合做快速分析和横向比较,常作为入口使用
- 用于定位大块内存占用、对比多个快照
Unity Objects:Unity 对象页签
- 展示所有 Unity 引擎级别的对象(非 C# 脚本对象)
- 例如
Texture2D、Mesh、Material、GameObject、Component、AnimationClip等 - 用于追查资源类内存开销来源、是否重复加载、是否未释放
All Of Memory:所有内存页签
- 工具里最强大、最底层、最全面的页签
- 显示包括托管堆(Managed Heap)在内的所有内存块
- 用于追查复杂内存泄漏、查找引用链闭环、深入调试
9.2 知识点代码
Lesson09_Unity性能分析工具_初识MemoryProfiler窗口.cs
public class Lesson09_Unity性能分析工具_初识MemoryProfiler窗口
{
#region 知识点一 Memory Profiler Package是什么
/*
* Memory Profiler Package(内存分析器包)
* - Unity 提供的独立内存分析工具
* - 可用于检查 Unity 应用程序以及 Unity 编辑器的内存使用情况
* - 支持捕获、检查、比较内存快照(Snapshot)
* - 获取的是某一时刻的全局内存情况
*
* 它和 Profiler 的 Memory 模块都是用于分析内存的,但定位和深度不同:
* - Profiler - Memory:实时监控更方便、数据更粗略、开销更小
* - Memory Profiler:快照分析更强、可对比、可追引用链、抓取快照时开销略高
*
* 总而言之:
* - Memory Profiler Package 是一个比起 Profiler 的 Memory 模块更细致排查内存问题的工具
*/
#endregion
#region 知识点二 Memory Profiler Package对于我们的意义
/*
* 它的意义:
* - 通过捕获不同时间点的内存快照并进行对比,定位内存泄漏、资源未释放、异常增长等问题
*
* 常见抓取方式(前后各抓一份快照做对比):
* 1. 打开一个 UI 面板前后
* 2. 运行 10 分钟前后
* 3. 切换场景前后
* ……等
*
* 适合用在这些诉求上:
* 1. 想要详细对比两次运行之间的内存差异
* 2. 想要知道到底是什么对象一直不释放
* 3. 想要知道哪段逻辑导致了内存暴涨
* ……等
*
* 常见组合思路:
* - 先用 Profiler 的 Memory 模块大概定位问题范围
* - 再用 Memory Profiler 做详细排查
*
* Profiler 是望远镜,Memory Profiler 是显微镜
*/
#endregion
#region 知识点三 初识Memory Profiler Package
/*
* 初识 Memory Profiler Package
* - 在笔记中中讲解
*/
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com