Start Debugging
2026-01-21 更新日 2026-01-23 dotnetdotnet-10dotnet-9performance Edit on GitHub

Perfetto + dotnet-trace: .NET 9/.NET 10 のための実践的なプロファイリングループ

.NET 9 と .NET 10 のための実践的なプロファイリングループ: dotnet-trace でトレースをキャプチャし、Perfetto で可視化し、CPU、GC、スレッドプールの問題を反復的に解決する。

.NET で「遅い」状態から最速で抜け出す方法は、推測をやめてタイムラインを見ることです。今週話題になっている記事は、dotnet-trace でトレースをキャプチャし、Perfetto (Android や Chromium 界隈で多くの人が知っているのと同じトレースビューワーのエコシステム) で確認するというきれいなワークフローを示しています: Using dotnet-trace with Perfetto

Perfetto をツールボックスに加える価値がある理由

すでに dotnet-counters やプロファイラーを使っているなら、Perfetto はその置き換えではありません。補完です:

.NET 9 と .NET 10 のアプリでは、「小さな」変更が誤って余計なアロケーションや余計なスレッド、新たな同期のボトルネックを持ち込んでいないか検証したいときに特に役立ちます。

キャプチャループ (まず再現、次にトレース)

コツはトレースを単発の作業ではなくループとして扱うことです:

グローバルツールを使った最小のキャプチャ手順は次のとおりです:

dotnet tool install --global dotnet-trace

# Find the PID of the target process (pick one)
dotnet-trace ps

# Capture an EventPipe trace (default providers are usually a good starting point)
dotnet-trace collect --process-id 12345 --duration 00:00:15 --output app.nettrace

app.nettrace ができあがります。そこから先は元の記事の変換/オープン手順に従ってください (「Perfetto で開く」の正確な経路は、どの Perfetto UI を使うか、どの変換手順を選ぶかによります)。

トレースを開いたときに何を見るか

数分で答えられる質問から始めます:

怪しいウィンドウを見つけたら、コードに戻って外科的な変更を加えます (例: アロケーションを減らす、sync-over-async を避ける、リクエストのホットパスからロックを外す、高コストな呼び出しをまとめる)。

実用的なパターン: シンボルを失わずに Release でトレースする

可能なら遅いパスを Release で実行 (本番に近い) しつつ、フレームを推論するのに十分な情報は残します。SDK-style プロジェクトでは PDB がデフォルトで生成されますが、プロファイリングのセッションでは出力パスを予測可能にしたいことが多いです:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <Configuration>Release</Configuration>
    <DebugType>portable</DebugType>
  </PropertyGroup>
</Project>

退屈に保ってください: 安定した入力、安定した設定、短いトレース、繰り返し。

Perfetto の詳細な手順とスクリーンショットが欲しい場合は、ループを回している間に開いておく参照として元の記事が一番です: Using dotnet-trace with Perfetto

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< 戻る