name: perf-profile description: "结构化的性能分析工作流。识别瓶颈、与性能预算对比测量,并生成带有优先级排序的优化建议。" argument-hint: "[系统名称 或 'full']" user-invocable: true allowed-tools: Read, Glob, Grep, Bash
当此技能被调用时:
确定范围根据参数:
- 如果是系统名称:专注于该特定系统的分析
- 如果是
full:对所有系统进行全面分析
读取性能预算 — 检查设计文档或 CLAUDE.md 中是否有现有性能目标:
- 目标 FPS(例如 60fps = 16.67ms 帧预算)
- 内存预算(总量和按系统)
- 加载时间目标
- Draw Call 预算
- 网络带宽限制(如果是多人游戏)
分析代码库中的常见性能问题:
CPU 分析目标:
_process()/Update()/Tick()函数 — 列出所有并估算开销- 大集合上的嵌套循环
- 热路径中的字符串操作
- 每帧代码中的分配模式
- 未优化的游戏实体搜索/排序
- 每帧执行的昂贵物理查询(射线检测、重叠检测)
内存分析目标:
- 大型数据结构及其增长模式
- 纹理/资源内存占用估算
- 对象池 vs 实例化/销毁模式
- 泄漏的引用(应该释放但未释放的对象)
- 缓存大小和淘汰策略
渲染目标(如适用):
- Draw Call 估算
- 重叠透明物体导致的过度绘制
- 着色器 (Shader) 复杂度
- 未优化的粒子系统
- 缺失 LOD (Level of Detail) 或遮挡剔除 (Occlusion Culling)
I/O 目标:
- 存档/读档性能
- 资源加载模式(同步 vs 异步)
- 网络消息频率和大小
生成性能分析报告:
## 性能分析:[系统或全面] 生成日期:[日期] ### 性能预算 | 指标 | 预算 | 估算当前值 | 状态 | |------|------|-----------|------| | 帧时间 | [16.67ms] | [估算值] | [正常/警告/超标] | | 内存 | [目标] | [估算值] | [正常/警告/超标] | | 加载时间 | [目标] | [估算值] | [正常/警告/超标] | | Draw Call | [目标] | [估算值] | [正常/警告/超标] | ### 发现的热点 | # | 位置 | 问题 | 预估影响 | 修复工作量 | |---|------|------|---------|-----------| | 1 | [文件:行号] | [描述] | [高/中/低] | [小/中/大] | | 2 | [文件:行号] | [描述] | [高/中/低] | [小/中/大] | ### 优化建议(按优先级排序) 1. **[标题]** — [优化描述] - 位置:[文件:行号] - 预期收益:[估算值] - 风险:[低/中/高] - 方案:[实现方式] ### 快速见效(每个不到 1 小时) - [简单优化 1] - [简单优化 2] ### 需要进一步调查 - [需要实际运行时分析来确定影响的领域]输出报告并附带摘要:前 3 个热点、相对于预算的估算余量,以及建议的下一步行动。
规则
- 不要先测量就优化 — 对性能的直觉是不可靠的
- 建议必须包含预估影响 — "让它更快"不具有可操作性
- 在目标硬件上进行分析,而不仅仅是开发机器
- 区分 CPU 瓶颈、GPU 瓶颈和 I/O 瓶颈
- 考虑最坏情况(最大实体数、最低配置硬件、最差网络条件)
- 静态分析(本技能)识别候选;运行时分析确认