Visual Studioのパフォーマンスプロファイラでパフォーマンス測定を行う際に Debug.WriteLine()
や Console.WriteLine()
のような感覚で、コードから処理の開始や終了、分岐、変数などの情報をパフォーマンスプロファイラのタイムライン上に追加する方法。
対応
-
プロジェクトにNuGetパッケージを追加する。
dotnet add package Microsoft.VisualStudio.DiagnosticsHub.UserMarks --version 17.12.35209.2
-
プロファイル対象のプロジェクトの条件付きコンパイルシンボルを追加する。
ソリューションエクスプローラのプロジェクト上で右クリック→プロパティ
→ビルド
→全般
を選択し、Release カスタム記号
に以下のシンボルを入力して追加
を押下する。DIAGHUB_ENABLE_TRACE_SYSTEM
※プロファイリングは通常Releaseビルドで行うのでReleaseカスタム記号側に追加。
-
タイムラインに追加したい情報をソースコードに追加する。
using Microsoft.DiagnosticsHub; var mk = new UserMarks("MyMark"); mk.Emit("処理1 開始"); // ダミー処理 System.Threading.Thread.Sleep(1000); for (var i = 0; i < 3; ++i) { mk.Emit($"ループ({i})"); // ダミー処理 System.Threading.Thread.Sleep(1000); } mk.Emit("処理1 終了"); using (var mk2 = new UserMarkRange("時間測定")) { // ダミー処理 System.Threading.Thread.Sleep(1500); } // ダミー処理 System.Threading.Thread.Sleep(1000);
実行結果
パフォーマンスプロファイラを起動すると、UserMarks.Emit
には引数で指定した個々のメッセージが出力され、UserMarkRange()
はスコープの実施に掛かった時間が出力されていることが確認できます。
参考ウェブサイトなど
-
NuGet Gallery
Microsoft. VisualStudio. DiagnosticsHub. UserMarks -
Microsoft Learn
プロファイリング タイムラインにユーザー マークを追加する (C#、C++)
以上です。