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