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. 02grepによる検査と正確なヒット数
  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 → 非同期処理;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 で確認してください)を添えてください。

正確性に関するルール(過剰に指摘しない)

  • 非同期メソッドでは Span<T> ではなく Memory<T> を使用します(非同期処理の規律に準拠)。
  • LINQ を使用するのはホットパスのみです(.NET 7 以降の Min/Max/Sum/Average はベクトル化されているため、全面的に禁止しません)。
  • ConfigureAwait(false) はライブラリコード(例:{{ProjectName}}.Shared)でのみ使用し、API/ハンドラーでは使用しません。
  • ValueTask は頻繁に同期的に完了するホットパスでのみ使用します。[GeneratedRegex] はコンパイル時にリテラルで指定されたパターンにのみ使用します。
  • ベンチマークによるエビデンスなしに unsafe / CollectionsMarshal.AsSpan を推奨しないでください。

上流のスキャナーとの相違点

Microsoft 版は、シールされていないクラスを構造上のパフォーマンス問題として指摘します。当プロジェクトでは指摘しません。標準ではドメインモデルが意図的な継承を使用しているため、「クラスをシールする」(CA1852/MA0053 → 提案)をあえて対象外にしています。シールされていないクラスに関する指摘はスキップしてください(または、内部の非ドメイン系ホット型に厳密に限定してください)。ドメインエンティティ/集約のシールを提案してはいけません。

コメント