Visual Studioのパフォーマンスプロファイラのタイムラインにマークを追加する方法

Visual Studioのパフォーマンスプロファイラでパフォーマンス測定を行う際に Debug.WriteLine()Console.WriteLine() のような感覚で、コードから処理の開始や終了、分岐、変数などの情報をパフォーマンスプロファイラのタイムライン上に追加する方法。


対応

  1. プロジェクトにNuGetパッケージを追加する。

    dotnet add package Microsoft.VisualStudio.DiagnosticsHub.UserMarks --version 17.12.35209.2
  2. プロファイル対象のプロジェクトの条件付きコンパイルシンボルを追加する。
    ソリューションエクスプローラのプロジェクト上で右クリック→プロパティビルド全般を選択し、Release カスタム記号に以下のシンボルを入力して追加を押下する。

    DIAGHUB_ENABLE_TRACE_SYSTEM

    file

    ※プロファイリングは通常Releaseビルドで行うのでReleaseカスタム記号側に追加。

  3. タイムラインに追加したい情報をソースコードに追加する。

    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()はスコープの実施に掛かった時間が出力されていることが確認できます。

file


参考ウェブサイトなど

  • NuGet Gallery
    Microsoft. VisualStudio. DiagnosticsHub. UserMarks

  • Microsoft Learn
    プロファイリング タイムラインにユーザー マークを追加する (C#、C++)


以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする