跳到主要内容

性能:先找到瓶颈,再选择优化

“把代码优化一下”很难得到可靠结果。先把问题描述成可测量现象:在哪台设备、什么操作后、帧时间怎样变化、内存是否持续增长。

平均 FPS 不是全部。 即使平均值不错,偶尔一次很长的帧也会让拖拽明显卡顿。

四类常见瓶颈​

观察可能方向先看什么
一次操作产生长帧主线程计算、实例化、布局重建CPU 时间线与调用栈
透明特效多时变慢GPU、透明叠加、填充渲染负载与覆盖面积
定期停顿分配与 GC 或周期性任务分配来源和触发时间
玩久后闪退内存峰值或持续增长纹理、音频、资源引用与池容量

先稳定复现,记录测量条件。Development Build、Deep Profile 和采集模块本身可能有开销;不同条件的数据不能直接混在一起比较。

托管对象、纹理音频和资源包等内存需要分别观察,释放引用不等于立即归零

对象池适合什么​

频繁创建和销毁的短寿命物品、特效或提示,可以复用对象。对象池减少部分分配和初始化成本,但会保留对象与资源,增加基础内存。

对象从池中取出、使用、重置并回收,避免反复创建同一类对象
回收前先重置状态;池不是无限仓库,需要容量与清理策略。

Unity 已有 UnityEngine.Pool.ObjectPool<T> 等能力,可以先复用。回收不只是 SetActive(false):还要清理事件、计时器、动画、选择态、数据引用和临时材质。

16 格棋盘不必为了“高级”就引入复杂池。先测量重复创建是否真的造成问题,再选择最简单的复用方式。

经常有效的第一批检查​

  • 不变的配置和组件查找放到初始化,避免每帧重复处理。
  • 分数没变化时,不持续改文本或触发布局。
  • 排查热路径上的字符串拼接、临时集合和不必要分配。
  • 资源按使用寿命分组,减少同时驻留和加载峰值。
  • 控制透明全屏效果、实时光照与高分辨率纹理。

这些是调查方向,不是“不用某个语法就一定快”的禁令。最终以目标设备测量为准。

性能任务怎样给 AI​

设备与版本:……。复现步骤:……。观测到合成时主线程尖峰约……,主要样本为……。请先解释证据,再提出最小修改;比较修改前后的同一操作,并检查内存与画面是否退化。

验收需要连续操作、长时间游玩、前后台和热机状态。微信真机与编辑器环境不同,平台可用的分析工具也要结合 SDK 确认。

参考:Unity Profiler、ObjectPool。