Analysieren von BenchmarkDotNet-Daten in Visual Studio
Sie können die Profilerstellungstools verwenden, um BenchmarkDotNet-Daten in Visual Studio zu erfassen und anzuzeigen.
Wenn Sie Ihren Benchmark-Klassen ein BenchmarkDotNet-Diagnosetool als Attribut hinzufügen, wird nach der Ausführung des Benchmarks eine .diagsession-Datei generiert. Anschließend können Sie die .diagsession in Visual Studio öffnen und Profilerstellungsdaten für die Benchmarks anzeigen.
Die folgenden Diagnoseinstrumente werden unterstützt:
- CPUUsageDiagnoser
- DatabaseDiagnoser
- DotNetCountersDiagnoser
- EventsDiagnoser
- FileIODiagnoser
Jedes Diagnoseinstrument generiert Leistungsdaten im Zusammenhang mit dem jeweiligen Diagnoseinstrument. Beispielsweise erzeugt der CPUUsageDiagnoser eine .diagsession-Datei mit CPU-Daten, und der DatabaseDiagnoser erzeugt eine .diagsession-Datei mit Daten zu Datenbankoperationen. Einschränkungen entsprechen dem zugehörigen Profilerstellungstool. Das Datenbanktool des Profilers funktioniert beispielsweise auf ADO.NET oder Entity Framework Core.
Voraussetzungen
Visual Studio 2022, Version 17.9 oder höher
Ihr Benchmarkprojekt muss die folgenden zwei NuGet-Pakete enthalten:
Erfassen von Benchmark.NET-Daten
Erstellen eines Konsolenprojekts.
Die Benchmark-Funktionen müssen einer .NET-Konsolenanwendung hinzugefügt werden. Bei diesen Funktionen kann es sich um Wrapperfunktionen handeln, die auf andere Projekttypen verweisen.
Setzen Sie Ihren Build auf einen Release-Build statt auf einen Debug-Build.
Attributieren Sie Ihren Code für Diagnoseinstrumente und Benchmarks, und fügen Sie Code zum Ausführen der Benchmarks (
BenchmarkRunner.Run
) hinzu.Fügen Sie den Namen des Diagnoseinstruments als Attribut zu der Klasse hinzu, die die Benchmarks enthält, für die Sie Daten generieren möchten.
Sie können beispielsweise den folgenden Code für den CPUUsageDiagnoser verwenden.
using System; using System.Security.Cryptography; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Running; using Microsoft.VSDiagnostics; namespace MyBenchmarks { [CPUUsageDiagnoser] public class Md5VsSha256 { private const int N = 10000; private readonly byte[] data; private readonly SHA256 sha256 = SHA256.Create(); private readonly MD5 md5 = MD5.Create(); public Md5VsSha256() { data = new byte[N]; new Random(42).NextBytes(data); } [Benchmark] public byte[] Sha256() => sha256.ComputeHash(data); [Benchmark] public byte[] Md5() => md5.ComputeHash(data); } public class Program { public static void Main(string[] args) { var summary = BenchmarkRunner.Run(typeof(Program).Assembly); } } }
Führen Sie die Anwendung aus, um die .diagsession-Datei zu generieren.
Überprüfen Sie die Konsolenausgabe, um den Speicherort der Datei zu ermitteln. Zum Beispiel:
// * Diagnostic Output - VSDiagnosticsDiagnoser * Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'. Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4} Stopped Exported diagsession file: *.diagsession
Benchmark .NET-Daten anzeigen
Wählen Sie in Visual Studio die Option Datei > > Datei öffnen, navigieren Sie zum Speicherort der .diagsession-Datei, wählen Sie die Datei aus und öffnen Sie sie.
Wählen Sie die Registerkarte Benchmark aus, um BenchmarkDotNet-Daten anzuzeigen.
Weitere Informationen zu den Ergebnissen finden Sie in der BenchmarkDotNet-Dokumentation.