Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können die Profilerstellungstools verwenden, um BenchmarkDotNet-Daten in Visual Studio zu sammeln und anzuzeigen. BenchmarkDotNet ist eine open-source .NET-Bibliothek, die für Leistungs-Benchmarking entwickelt wurde. Es automatisiert den Prozess zum Messen und Vergleichen der Ausführungszeit, der Speicherauslastung und anderer Leistungsmetriken Ihres .NET-Codes auf zuverlässige und wiederholbare Weise.
Sie verwenden BenchmarkDotNet, indem Sie erforderliche NuGet-Pakete in Ihrem Projekt installieren und dann Ihrem Code Attribute hinzufügen, die mit dem Typ der Leistungsinformationen übereinstimmen, an denen Sie interessiert sind.
Voraussetzungen
Visual Studio 2022, Version 17.9 oder höher
Ihr Benchmarkprojekt muss die folgenden zwei NuGet-Pakete enthalten:
Wenn Sie die Benchmark-Projektvorlage verwenden, sind diese NuGet-Pakete vorhanden, wenn Sie das Projekt erstellen.
Einrichten des Projekts
Die Benchmarkattribute müssen einer .NET-Konsolenanwendung hinzugefügt werden. Zu Wrapperfunktionen, die auf andere Projekttypen verweisen, können Attribute hinzugefügt werden.
Verwenden Sie eine der folgenden Methoden, um Ihr Projekt auf die BenchmarkDotNet-Unterstützung vorzubereiten:
Öffnen Sie ein vorhandenes Konsolenprojekt, oder erstellen Sie ein neues Konsolenprojekt. In diesem Szenario fügen Sie die BenchmarkDotNet-Unterstützung manuell hinzu.
Verwenden Sie die Benchmark-Projektvorlage . Einige der in diesem Artikel beschriebenen Schritte sind nur erforderlich, wenn Sie die BenchmarkDotNet-Unterstützung manuell hinzufügen.
Die Benchmark-Projektvorlage generiert ein vollständig integriertes BenchmarkDotNet-Projekt mit eingebauter Unterstützung für CPU-Auslastungsprofilierung und Copilot Insights. Um die Vorlage zu verwenden, wählen Sie "Profilerstellung" aus der Projekttypenliste aus, wenn Sie ein neues Projekt erstellen, und wählen Sie dann "Benchmark-Projekt" aus. Informationen zu Attributen finden Sie unter Attribut Ihres Codes.
Erstellen Sie ein Konsolenprojekt, oder verwenden Sie ein vorhandenes Konsolenprojekt.
Die Benchmarkattribute müssen einer .NET-Konsolenanwendung hinzugefügt werden. Attribute können zu Wrapperfunktionen hinzugefügt werden, die auf andere Projekttypen verweisen.
Attributieren des Codes
Wenn Sie ein BenchmarkDotNet-Diagnosetool als Attribut zu Ihren Benchmark-Klassen hinzufügen, konfigurieren Sie die App so, dass nach der Ausführung der Benchmarks eine .diagsession-Datei generiert wird. Anschließend können Sie die diagsession-Datei in Visual Studio öffnen und Profilerstellungsdaten für die Benchmarks anzeigen.
Die folgenden Diagnoser werden unterstützt:
- CPU-Auslastungsdiagnose
- Datenbankdiagnose
- DotNetCountersDiagnoser
- EventsDiagnoser
- FileIODiagnoser
Jedes Diagnostikmodul generiert Leistungsdaten im Zusammenhang mit diesem Modul. Beispielsweise generiert der CPUUsageDiagnoser eine Diagsession-Datei mit CPU-Daten darin, und der DatabaseDiagnoser generiert eine Diagsession-Datei mit Daten in Datenbankvorgängen. Einschränkungen entsprechen dem zugehörigen Profilerstellungstool. Das Datenbanktool des Profilers funktioniert beispielsweise auf ADO.NET oder Entity Framework Core.
So attributieren Sie Ihren Code für Diagnoser und Benchmarks:
Fügen Sie den Diagnosernamen als Attribut zur Klasse hinzu, die die Benchmarks enthält, für die Sie Daten generieren möchten.
Fügen Sie das
BenchmarkAttribut zu den Methoden hinzu, die Sie auf Leistung testen möchten.Sie können beispielsweise den folgenden Code für den CPUUsageDiagnoser verwenden.
Wenn Sie die Benchmark-Projektvorlage verwenden, wird der Beispielcode bereits in der Vorlage bereitgestellt. Wenn Sie die BenchmarkDotNet-Unterstützung manuell hinzufügen, können Sie den folgenden Beispielcode 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); } } }
Sammeln und Anzeigen von Benchmark.NET Daten
Legen Sie ihren Build auf einen Releasebuild anstelle eines Debugbuilds fest.
Führen Sie die Anwendung aus, um die Diagsession-Datei zu generieren.
Überprüfen Sie die Konsolenausgabe, um den Speicherort der Datei abzurufen. Beispiel:
// * Diagnostic Output - VSDiagnosticsDiagnoser * Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'. Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4} Stopped Exported diagsession file: *.diagsessionWä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 "Benchmarks " aus, um Daten für die BenchmarkDotNet-Benchmarks anzuzeigen.
Weitere Informationen zu den Ergebnissen auf der Registerkarte "Benchmarks " finden Sie in der BenchmarkDotNet-Dokumentation .
Klicken Sie mit der rechten Maustaste auf eine Zeile in den Ergebnissen, und wählen Sie "Zeitraum auswählen " aus, um das Zeitachsendiagramm mit dem Benchmark zu synchronisieren.
Wählen Sie eine der verfügbaren Registerkarten wie CPU-Auslastung oder Zuordnungen aus.
Abhängig vom Diagnoser, den Sie zum Sammeln von Daten verwendet haben, können Sie Einblicke im Zusammenhang mit der Speicherzuweisung, der CPU-Auslastung, den Leistungsindikatoren und anderen Leistungsdaten erhalten. Verwenden Sie zum Analysieren von Speicherzuordnungen den integrierten MemoryDiagnoser , indem Sie das Attribut [MemoryDiagnoser] hinzufügen. Weitere Informationen finden Sie unter Diagnoser.
Hinweis
Der Profiler unterstützt nur die [MemoryDiagnoser] und die zuvor in diesem Artikel aufgeführten Diagnoser.
Ein Beispiel für die Verwendung des Profilers zum Analysieren von Speicherzuordnungen finden Sie im Blogbeitrag Benchmarking mit Visual Studio Profiler.
Um Daten zu analysieren, die mit anderen Registerkarten wie der CPU-Auslastung zusammenhängen, siehe die entsprechenden Artikel in der Profiling-Dokumentation.
Optimieren mit Copilot
Sie können CPU- und Speicherzuordnungsoptimierungen für Ihre BenchmarkDotNet-Benchmarks direkt aus dem Editor mithilfe von CodeLens auslösen. Dadurch wird die Leistungsoptimierung barrierefreier und nahtloser, sodass Sie Probleme mit der CPU- und Speicherzuweisung direkt an der Stelle des Codes finden und beheben können.
Wählen Sie den CodeLens-Indikator über Ihrem Benchmark aus, und wählen Sie dann die Option " Zuordnungen mit Copilot optimieren" aus.