mcpField
D
dotnet-performance-review

dotnet-performance-review

github.com/atherio-danp测试与质量10954 次安装13 周前更新
代码仓库

关于 dotnet-performance-review

dotnet-performance-review 是用于 .NET API 源码的只读静态审查技能。它扫描性能反模式,按严重程度分类并报告证据,不会修改代码。

主要功能

  1. 01按信号选择扫描主题
  2. 02使用 grep 检查并统计命中数
  3. 03按严重程度和实例数分类
  4. 04报告问题位置及修复建议
  5. 05避免缺乏依据的优化结论

适用场景

  1. 01审查 .NET API 代码中的性能风险
  2. 02检查异步、内存、集合、正则和 I/O 模式
  3. 03整理问题以供后续基准测试验证

MCP 相关

代码读取、搜索和导航必须使用 Serena MCP,并需先加载其工具手册。此扫描为只读操作。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/atherio-danp/cde-dotnetcc --skill dotnet-performance-review

安装后在 Claude Code 中输入/dotnet-performance-review确认已加载。

详细介绍

代码必须使用 Serena MCP(此处为只读)。 首先调用 mcp__serena__initial_instructions 加载 Serena 工具手册,然后所有代码读取、搜索和导航都使用 Serena — 优先使用符号导航(get_symbols_overview / find_symbol / find_referencing_symbols),而不是读取整个文件。

.NET 性能审查(只读扫描)

一个用于 {{ProductName}} .NET API 的静态、只读反模式扫描器 — 它只报告,不会编辑。与 architect-backend 审查和 microbenchmarking 配合使用(通过实测证据确认修复)。符合我们的 coding-standards.md 和异步规范。

**输入:**要扫描的源代码(必需);热路径上下文 + 目标框架(.NET 10);深度 = critical-only / standard(默认)/ comprehensive。

工作流

  1. 检测信号 → 主题。 扫描信号并选择主题:async/await/Task/ValueTask → async;Span</stackalloc/ArrayPool/Substring/.Replace/.ToLower/循环中的 += → 内存与字符串; Regex/[GeneratedRegex] → 正则表达式;Dictionary</List</.ToList()/LINQ → 集合;JsonSerializer/ HttpClient/Stream → I/O 与序列化。
  2. 扫描并使用 grep 确认(输出包含准确命中数的检查清单;0 次命中也是有效发现):
    • grep -n '\.Substring(' · grep -En '\.(StartsWith|EndsWith|Contains)\s*\('(缺少 StringComparison)· grep -n '\.ToLower()\|\.ToUpper()'(使用 StringComparison.OrdinalIgnoreCase)· grep -n 'new HttpClient('(先检查是否使用 IHttpClientFactory)· grep -n 'RegexOptions.Compiled' 与 grep -n 'GeneratedRegex'(对于字面量模式,优先使用源生成)· grep -n 'static readonly Dictionary<'(仅在从不修改时才考虑使用 FrozenDictionary)。
    • **反向验证:**对于缺失模式,报告比例(例如:“7 处中有 3 处使用了 StringComparison”)。
  3. 分类: 🔴 严重(死锁/崩溃/安全问题/>10×),🟡 中等(2–10× / 热路径最佳实践), ℹ️ 信息。热路径代码会提高严重性;11–50 个实例将信息级提升为中等,50 个以上 = 系统性问题。报告数量。
  4. 报告按发现项简明呈现:#### ID. 标题(N 个实例) / 影响 / 文件,格式为 File.cs:L42 / 修复 / 可选注意事项 — 按严重性分组,并以汇总表结束。最后附上非确定性说明 (LLM 扫描只是线索,不是证明 — 使用 microbenchmarking 确认热路径收益)。

正确性规则(避免过度标记)

  • 在异步方法中使用 Memory<T>,而不是 Span<T>(符合我们的异步规范)。
  • 仅在热路径上避免 LINQ(自 .NET 7 起,Min/Max/Sum/Average 已向量化 — 不要一概禁止)。
  • 仅在库代码中使用 ConfigureAwait(false)(例如 {{ProjectName}}.Shared),不要在 API/处理程序中使用。
  • 仅对频繁同步完成的热路径使用 ValueTask;仅对编译时字面量模式使用 [GeneratedRegex]。
  • 没有基准测试证据时,绝不建议使用 unsafe / CollectionsMarshal.AsSpan。

我们与上游扫描器的不同之处

Microsoft 版本会将未密封类标记为结构性性能问题。我们不会 — 我们的标准有意将“密封你的类”(CA1852/MA0053 → 建议)排除在外,因为领域模型使用了有意设计的继承。跳过未密封类问题(或严格限定为内部非领域热类型),绝不要建议密封领域实体/聚合。

评论

支持 Markdown