一场战斗打到后半段,帧时间从 22 ms 涨到 44 ms,帧率对半砍。抓 trace 之后发现罪魁是玩家的闪避拖尾特效——它在场景里稳态堆了 702 个存活实例,而玩家每秒最多闪避一两次。
根因在 Ribbon 发射器的 Particle State 模块:三个「让粒子死掉」的开关全是关的,于是组件永远不回池,每闪避一次净增 6 个,攒到 117 次就是 702。
这篇记录整个链条:怎么从 trace 定位到资产、为什么静态审计工具查不出来、运行时怎么在十分钟内实锤根因,以及归因过程中我自己踩的两个坑。数据来自一个 UE 5.x ARPG 项目的 Win64 Development 构建实机 trace。