1.Memory简介
2.Memory中各参数的功能和作用
1.Memory简介
1).Memory(内存)模块它是unity中监视内存使用情况的关键工具, 它能帮助我们识别哪些资源在占有大量内存,是否存在内存泄露或垃圾回收频繁等问题2).游戏中如果出现以下问题, 可以重点观察memorya.游戏卡顿, 掉帧- 表现: 游戏突然变慢, 不定期小卡顿, 操作延迟等- 可能原因: 内存不足导致系统频繁进行垃圾回收(GC), 降低游戏帧率b.闪退, 崩溃- 表现: 玩着突然黑屏突出, 特定场景(如加载大地图等)崩溃- 可能原因: 设备分配不出更多内存, 系统强制杀掉进程c.加载时间变长- 表现: 加载界面等待时间变长, 场景切换明显卡顿- 可能原因: 加载资源时需要更多内存, 系统调度与GC频繁运行d.发热严重, 掉电快- 表现: 手机发烫严重, 电池消耗快- 可能原因: 设备内存使用到达极限, 系统/游戏频繁调度内存资源, CPU, GPU都高负荷运转e.低端设备无法运行- 表现: 打开即闪退, 进主界面就奔溃- 可能原因: 老旧设备的可用内存更少, 超出后甚至无法加载首屏
2.Memory中各参数的功能和作用

a.Total Used Memory已使用的内存总量(包括纹理, 网格, 对象, 脚本等所有内存)b.Texture Memory贴图纹理使用的内存总量, 通常是内存占用的最大部分c.Mesh Memory网格使用的内存总量(顶点, 索引缓冲等)和场景中物体数量密切相关d.Material Count材质数量, 材质越多越难合批, 内存占用也高e.Object Count内存中的UnityEngine.Object实例总数, 包括贴图, 网格, 脚本, GameObjectf.GC Used MemoryGC(托管堆)使用的内存(堆已分配但仍被使用)g.GC Allocated In Frame该帧分配的托管堆内存

a.Normalized(规范化)勾选后可以帮助我们分析内存是否稳定, 对比不同类型资源的内存占比变化b.Total Committed Memory(总提交内存)表示Unity总共已分配的内存(虚拟内存), 包括系统预留 + 实际使用- Tracked Memory(跟踪的内存, 即Memory Profiler能看见的部分), 包括托管堆内存,图形资源, 音视频等In Use表示实际使用量, Reserved表示预留内存- Untracked Memory(未跟踪的内存), Unity已使用但未跟踪的内存总量, 比如本机插件, Mono或IL2CPP的元数据c.Total Memory Breakdown(总内存细分)表示会显示具体为Unity的哪些子系统分配了多少内存- Managed Head托管堆内存使用情况(即由C#脚本分配的对象内存), 分为正在使用/预留内存- Graphics & Graphics Driver图形/图形驱动程序分配的内存- Audio音效系统预估内存使用量- Video视频系统预估内存使用量- Other其它系统内存使用情况, 未归类但可追踪的内存, 如Unity编辑器自身的一些缓存结构- ProfilerUnity Profiler本身占用的内存(采样数据, 快照)- Untracked Memory内存性能分析器无法追踪的内存使用量d.Object Stats(对象统计信息)表示资源类对象的数量与内存分布概括- Textures已加载的纹理总数以及使用的内存- Meshes已加载的网格总数以及使用的内存- Materials已加载的材质总数以及使用的内存- Animations Clips已加载的动画剪辑总数以及使用的内存- Assets已加载的资源总数- Game Objects场景中的游戏对象实例的总数- Scene ObjectsScene中所有对象总数, 包含GameObject, 组件以及场景中不属于资源的内容- GC allocated in frame该帧分配的托管堆内存数量和总大小
注:对于空场景都有Textures, Meshs等对象的分配和内存占用; 因为unity即使是空场景, 也会默认加载一些内建资源, 比如内置字体, 编辑器用到的各种图标, GUI样式, Gizmos相关资源Profiler自己的资源, 这些内容其实不属于游戏资源