1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】Visual Studioの診断ツールを使いこなして.NETアプリのパフォーマンスを改善する

Posted at

Visual Studio には強力な診断ツールが標準搭載されています。本記事では、無料の Community Edition でも使える診断ツールの機能を詳しく紹介します。

はじめに

Visual Studio は高機能な IDE ですが、その診断ツール機能は意外と使いこなせていない方も多いのではないでしょうか。本記事では、デバッグ中に使える診断ツールの各機能を詳しく解説します。

また C#を用いて確認を行いました。ほかの他の言語を用いる場合には機能が使用できない可能性がございます。

環境

  • Visual Studio 2026 Community

公式ドキュメント

基本機能:リアルタイム監視

デバッグを開始すると、診断ツールウィンドウが自動で表示されます。ここではリアルタイムで以下の情報を確認できます。

  • メモリ使用量の推移
  • CPU 使用量の推移
  • GC(ガベージコレクション)の実行タイミング

基本機能

これだけでも十分有用ですが、さらに詳細な分析が必要な場合は以下の機能を活用することができます。

CPU 使用率の詳細分析

記録の開始方法

  1. デバッグを開始し、1 つ目のブレークポイントで停止
  2. 診断ツールの「CPU の監視」から記録を開始
  3. 2 つ目のブレークポイントまで実行

CPU記録開始

記録が完了すると、以下のような分析結果が表示されます。

CPU分析結果

  • カーネル、ランタイムなど、どの要素が CPU を使用していたか
  • CPU 使用率の上位メソッド一覧

GitHub Copilot との連携

分析結果を GitHub Copilot に解析してもらうことも可能です。「Copilot に尋ねる」ボタンから、パフォーマンス改善のアドバイスを受けられます。

Copilot連携

詳細ビューの種類

「詳細を開く」をクリックすると、さらに詳細な分析画面に移動します。複数のビューが用意されており、それぞれ異なる視点で分析できます。

1. 呼び出し元/呼び出し先ビュー

現在選択中のメソッドを中心に、以下を視覚的に表示します。

  • メソッド自体の CPU 使用率
  • 呼び出しているメソッドの CPU 使用率
  • 呼び出し元の CPU 使用率

呼び出し元/呼び出し先

特徴:

  • 枠の大きさが使用率に比例するため、ボトルネックが一目瞭然
  • クリックで呼び出し元・呼び出し先に移動可能
  • 実際のコードが下部に表示されるため、該当行をすぐに確認できる

使いどころ:
特定のメソッドから深掘りして、性能問題の原因を追跡する場合に最適です。

2. 呼び出しツリービュー

コールツリー全体を表示し、メソッドごとの CPU 使用率を一覧できます。

呼び出しツリー

重要な指標:

  • 合計 CPU: メソッドが呼び出した全処理を含む CPU 使用率
  • セルフ CPU: メソッド自体の処理だけの CPU 使用率

例えば、重いメソッドを呼び出しているだけのメソッドは「合計 CPU」は高いが「セルフ CPU」は低くなります。

特徴:

  • ホットパス(最もリソースを使用したパス)に炎マークを表示可能
  • テーブルをマークダウンとしてコピー可能

使いどころ:
全体を俯瞰して、どの処理フローが重いか確認したい場合に最適です。

3. モジュールビュー

モジュール(メソッド)ごとに、行単位で CPU 使用率を表示します。

モジュール

特徴:

  • 呼び出し関係ではなく、純粋な使用率順に表示
  • メソッド内のどの行が重いかまで確認可能
  • テーブルをマークダウンとしてコピー可能

使いどころ:
「よく使う共通メソッドが少し遅くて、それが積み重なって全体に影響している」ようなケースで威力を発揮します。

4. 関数ビュー

モジュールビューに似ていますが、行単位の詳細は表示せず、メソッド単位でよりすっきり表示します。

関数

特徴:

  • テーブルをマークダウンとしてコピー可能

5. フレームグラフ

CPU 使用率を直感的に理解できるビジュアル表示です。

フレームグラフ

特徴:

  • 幅が広いほど CPU 使用率が高い
  • クリックで詳細を確認
  • 直感的な操作で問題箇所を特定

使いどころ:
まず全体を把握して、問題がありそうな箇所を見つける最初のステップとして最適です。

ビュー間の連携

これらのビューは相互に連携しています。

使用例:

  1. フレームグラフで CPU 使用率が高い処理を発見
  2. 右クリックして「モジュールで表示」を選択
  3. モジュールビューで行単位の詳細を分析

各ビューの強みを活かして連携させることで、効率的に問題を特定できます。

.NET カウンター

「パフォーマンスカウンターの表示」から追加できる詳細なメトリクスです。

.NETカウンター

特徴:

  • GC の詳細な実行状況
  • スレッドプールの状態
  • 例外の発生回数
  • など、多数のメトリクスを選択可能

使いどころ:
本格的なチューニング時に、より深い情報が必要な場合に活用します。

メモリ使用量の分析

「スナップショットの作成」ボタンから、任意のタイミングでメモリ状態を記録できます。

メモリ使用量

できること:

  • 特定時点のメモリ使用状況を詳細に分析
  • 複数スナップショットの比較によるメモリ増減の確認
  • どのオブジェクトがメモリを占有しているか確認

使いどころ:
メモリ使用量が多い時に具体的にどのオブジェクトがメモリをたくさん使用してるか調べることが可能です。またアロケーション削減の対策を実施した際、意図通りにメモリ使用量が減っているか確認する場合にも有効です。

その他の機能

公式ドキュメントによると、以下の機能も提供されています。

  • ファイル I/O のプロファイリング
  • データベース分析
  • .NET 非同期ツール

これらは別の機会に詳しく調査したいと思います。

まとめ

Visual Studio Community を用いて拡張機能なしの状態でここまでの性能解析が可能です。

ポイント:

  • リアルタイム監視で問題の兆候を早期発見
  • CPU 使用率の詳細分析で、複数のビューを連携させてボトルネックを特定
  • メモリ使用量のスナップショットで最適化の効果を確認
  • GitHub Copilot との連携で改善提案も受けられる

これらのツールを活用することで、.NET アプリケーションのパフォーマンス改善が格段にやりやすくなります。公式が IDE レベルでこれだけの機能を提供しているのは、C#/.NET 開発の大きな強みと言えるでしょう。

ぜひ日々の開発で活用してみてください!

この記事が皆様のコーディングライフの助けになれば幸いです。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?