帧时间的形状:从曲线读出问题类型

帧时间图不是杂乱无章的。常见的性能问题有典型的"形状",学会认形状,能跳过很多分析步骤。

五种典型形状

形状 特征 典型原因
平线 + 偶发尖峰 平时 16ms,突然 80ms 加载(流式加载 / 纹理流送)、GC、自动保存
周期性尖峰 每隔 N 秒规则地卡 定期任务(缓存刷新、检查点保存、AI 重规划)
整体抬高 平均 20ms 无尖峰 均匀负载过重(Tick 太多、DrawCall 太多)
随时间爬升 越玩越慢 内存泄漏 / 缓存膨胀 / 碎片
场景相关波动 换个地方就卡 特定关卡的特定系统(大数据量关卡 / 特效密集区)

对应的排查方向

形状 下一步
偶发尖峰 Insights 里找尖峰帧,看是不是资源加载(同步加载的残余)
周期性尖峰 找定时器与"每 N 秒"的任务;GC 调优(stat gc)
整体抬高 按系统分解(stat 各项),找最大项做常规优化
爬升 内存 / 对象计数监控,找泄漏(第 3 章内存节)
场景相关 针对该场景做专项 profile(Stat + Insights 定点捕捉)

一个识别形状的实战

测试报"玩半小时后变卡"。把帧率曲线拉出来:前 20 分钟平稳,之后缓慢爬升。形状 → "随时间爬升" → 查对象数量:stat objectcount 或者 Insights Memory → 发现某个对象池只进不出,修正后曲线恢复平直。

这就是"形状思维"的价值:五分钟看图,省掉一小时盲目搜索。