首页/ 第 16 章 · 性能优化/ 第 267 课
LESSON 267 · 性能优化

内存管理

内存管理完成。下一课学场景加载优化。

⏱ 约 13 分钟📊 难度:入门🗂 第 16 章 · 性能优化📍 第 267 / 300 课
课程进度
267 / 300

🎯本节学习目标

  • 监控内存
  • 掌握卸载时机
  • 控制内存峰值

🚀课程导读

“内存爆了闪退”是移动端大敌。本课学监控与回收内存。

内存监控

看用了多少。

  1. 【Profiler Memory】Window → Analysis → Profiler → Memory 模块。
  2. 【看数据】Total Allocated(已分配)、Texture/Audio 占比、GC 堆大小。
  3. 【模块分类】看哪类资源占内存大头(纹理/音频/网格/动画)。
  4. 【运行时监控】GameObject 内存监控:
  5. Debug.Log(System.GC.GetTotalMemory(false)); // GC 堆
  6. 【真实设备】真机看任务管理器/系统内存(进阶)。
  7. 【内存分布】
  8. 资源内存(纹理/音频/模型)。
  9. 运行时分配(对象、GC 堆)。
  10. 【目标】移动端 < 1-2GB(看设备)、PC 宽松。
  11. 【完成】“看得到”内存了!
💡
内存监控:Profiler Memory 看资源、System.GC 看堆。两项都盯。

回收与生命周期

“该删就删”。

  1. 【Destroy】不用的大对象 Destroy 掉。
  2. 【场景卸载】切场景后旧场景资源被卸载(除非 DontDestroyOnLoad)。
  3. 【Resources.UnloadUnusedAssets()】卸载无引用的资源(协程调用,避免主线程卡):
  4. StartCoroutine(UnloadCoroutine());
  5. IEnumerator UnloadCoroutine() {
  6. yield return new WaitForSeconds(5f);
  7. Resources.UnloadUnusedAssets();
  8. yield return null;
  9. }
  10. 【注意】别频繁调用(有开销)。
  11. 【对象池】复用代替销毁(减少分配,第 198 课)。
  12. 【纹理卸载】大图不用时卸载(按场景/区域)。
  13. 【音频】长音频用 Streaming 后不占内存(第 266 课)。
  14. 【地址化】Addressables 按需加载/释放(进阶)。
  15. 【泄漏】DontDestroyOnLoad 的对象不会自动卸载:跨场景管理器用单例+小心。
  16. 【完成】内存“进出有度”。
  17. 【测试】长时间游玩后看内存是否稳定(无泄漏)。
  18. 【注意】真机长时间游玩是内存测试关键。
  19. 【常见坑】贴图集未压缩、动画不卸载、场景大资源常驻。
内存管理 = 监控 + 按需卸载 + 对象池复用 + 防泄漏。四板斧。

常见错误与排查

错误:内存一直涨不回落?
原因:资源泄漏或没卸载
解决:检查 DontDestroyOnLoad 常驻对象;卸载无用资源;用 Profiler 定位泄漏源。

动手练习

课后小任务(做出来才算真的学会)

  • 用 Profiler 监控内存
  • 实现按需卸载
  • 长时间游玩验证内存稳定

本节小结

内存管理完成。下一课学场景加载优化。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课资源与加载优化