9.初识MemoryProfiler窗口

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对于我们的意义

它可以通过捕获不同时间点的内存快照并进行对比,来定位内存泄漏、资源未释放、异常增长等问题。

比如我们在做某些操作时,前后各抓一份快照来对比:

  1. 打开一个 UI 面板前后
  2. 运行 10 分钟前后
  3. 切换场景前后
  4. ……等

当我们想要:

  1. 详细对比两次运行之间的内存差异
  2. 知道到底是什么对象一直不释放
  3. 找出是哪段逻辑导致内存暴涨
  4. ……等

就可以使用 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(捕获新快照)按钮

顶部菜单

  1. 开/关左侧快照相关窗口
  2. 加载保存的内存快照
  3. 捕获内存快照(展开后可以选择要捕获的信息)
  4. 附加到应用程序(展开后可以选择要附加到的应用程序)
  5. 关闭右侧信息窗口
  6. 更多设置

三种页签概述

  • Summary:总结概要页签

    • 主要显示快照中的内存总体信息,适合做快速分析和横向比较,常作为入口使用
    • 用于定位大块内存占用、对比多个快照
  • Unity Objects:Unity 对象页签

    • 展示所有 Unity 引擎级别的对象(非 C# 脚本对象)
    • 例如 Texture2DMeshMaterialGameObjectComponentAnimationClip
    • 用于追查资源类内存开销来源、是否重复加载、是否未释放
  • 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

×

喜欢就点赞,疼爱就打赏