用途:对 .NET/C# 代码做静态、只读的性能反模式扫描,只报告不修改,可与后端架构评审和微基准测试配合,用于确认修复效果。
主要能力:按信号识别主题,如 async/await/Task/ValueTask 归入异步,Span/stackalloc/ArrayPool/Substring/Replace/ToLower/循环内 += 归入内存与字符串,Regex/[GeneratedRegex] 归入正则,Dictionary/List/ToList()/LINQ 归入集合,JsonSerializer/HttpClient/Stream 归入 I/O 与序列化。用 grep 确认命中并输出清单,0 命中也是有效结论;对缺失模式报告比例。按 🔴 Critical、🟡 Moderate、ℹ️ Info 分级,热路径会提升严重度,11–50 处升一级,50+ 视为系统性问题。每条发现给出 ID、标题与实例数、影响、文件位置 File.cs:L42、修复建议和可选注意事项,按严重度分组并以汇总表收尾。
使用方式:代码读取必须使用 Serena MCP(只读),先调用 mcp__serena__initial_instructions 加载工具手册,再用符号导航(get_symbols_overview / find_symbol / find_referencing_symbols)优先于整文件读取。输入包括待扫描源码(必填)、热路径上下文与目标框架(.NET 10)、深度(critical-only / standard 默认 / comprehensive)。示例命令:grep -n '.Substring('、grep -En '.(StartsWith|EndsWith|Contains)\s*('、grep -n 'new HttpClient('、grep -n 'RegexOptions.Compiled' 与 grep -n 'GeneratedRegex'。
限制与规则:异步方法中用 Memory<T> 而非 Span<T>;LINQ 仅限热路径(.NET 7 起 Min/Max/Sum/Average 已向量化);ConfigureAwait(false) 仅用于库代码;ValueTask 仅用于频繁同步的热路径;[GeneratedRegex] 仅用于编译期字面量模式;无基准证据不得推荐 unsafe 或 CollectionsMarshal.AsSpan。与上游扫描器不同,本技能不将未密封类作为性能问题,不提议密封领域实体或聚合。LLM 扫描结果只是线索而非证明,热路径收益需用微基准测试确认。