Delen via


BenchmarkDotNet-gegevens analyseren in Visual Studio

U kunt de profileringshulpprogramma's gebruiken om BenchmarkDotNet-gegevens te verzamelen en weer te geven in Visual Studio. BenchmarkDotNet is een opensource .NET-bibliotheek die is ontworpen voor benchmarking van prestaties. Het automatiseert het proces van het meten en vergelijken van de uitvoeringstijd, het geheugengebruik en andere prestatiegegevens van uw .NET-code op een betrouwbare en herhaalbare manier.

U gebruikt BenchmarkDotNet door vereiste NuGet-pakketten in uw project te installeren en vervolgens kenmerken toe te voegen aan uw code die overeenkomen met het type prestatiegegevens waarin u geïnteresseerd bent.

Vereiste voorwaarden

Stel uw project in

De benchmarkkenmerken moeten worden toegevoegd aan een .NET-consoletoepassing. De kenmerken kunnen worden toegevoegd aan wrapper-functies die verwijzen naar andere projecttypen.

Gebruik een van de volgende methoden om uw project voor te bereiden op benchmarkDotNet-ondersteuning:

  • Open een bestaand consoleproject of maak een nieuw consoleproject. In dit scenario voegt u handmatig benchmarkDotNet-ondersteuning toe.

  • Gebruik de sjabloon Benchmark Project . Sommige van de stappen die in dit artikel worden beschreven, zijn alleen vereist wanneer u handmatig BenchmarkDotNet-ondersteuning toevoegt.

    De Benchmark Project-sjabloon genereert een volledig geïntegreerd BenchmarkDotNet-project met ingebouwde ondersteuning voor CPU-gebruiksprofilering en Copilot-inzichten. Als u de sjabloon wilt gebruiken, selecteert u Profilering in de lijst met projecttypen wanneer u een nieuw project maakt en kiest u Vervolgens Benchmark Project. Voor informatie over attributen, zie Kenmerken van uw code.

Schermopname van de BenchmarkDotNet-sjabloon in Visual Studio.

Maak een consoleproject of gebruik een bestaand consoleproject.

De benchmarkkenmerken moeten worden toegevoegd aan een .NET-consoletoepassing. De kenmerken kunnen worden toegevoegd aan wrapper-functies die verwijzen naar andere projecttypen.

Uw code kenmerk

Wanneer u een BenchmarkDotNet-diagnoser als kenmerk toevoegt aan uw benchmarkklassen, configureert u de app om een .diagsession-bestand te genereren nadat de benchmarks zijn uitgevoerd. Vervolgens kunt u het .diagsession-bestand openen in Visual Studio en profileringsgegevens voor de benchmarks bekijken.

De volgende diagnoses worden ondersteund:

  • CPUUsageDiagnoser
  • DatabaseDiagnoser
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

Elke diagnosemodule genereert prestatiegegevens die betrekking hebben op die diagnosemodule. De CPUUsageDiagnoser genereert bijvoorbeeld een .diagsession-bestand met CPU-gegevens in het bestand en de DatabaseDiagnoser genereert een .diagsession-bestand met gegevens over databasebewerkingen. Beperkingen komen overeen met het bijbehorende profileringsprogramma. Het databasehulpprogramma van de profiler werkt bijvoorbeeld op ADO.NET of Entity Framework Core.

Uw code voor diagnosers en benchmarks toewijzen:

  1. Voeg de naam van de diagnoseroutine toe als een kenmerk aan de klasse die de benchmarks bevat waarvoor u gegevens wilt genereren.

  2. Voeg het Benchmark kenmerk toe aan de methoden die u wilt testen op prestaties.

    U kunt bijvoorbeeld de volgende code gebruiken voor de CPUUsageDiagnoser.

    Als u de sjabloon Benchmark Project gebruikt, wordt er al voorbeeldcode in de sjabloon opgegeven. Als u benchmarkDotNet-ondersteuning handmatig toevoegt, kunt u de volgende voorbeeldcode gebruiken.

    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);
            }
        }
    }
    

Benchmark.NET gegevens verzamelen en weergeven

  1. Stel uw build in op een release-build in plaats van een foutopsporingsbuild.

  2. Voer de toepassing uit om het .diagsession-bestand te genereren.

    Controleer de console-uitvoer om de locatie van het bestand op te halen. Voorbeeld:

    // * Diagnostic Output - VSDiagnosticsDiagnoser * 
    Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'.
    Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4}
      Stopped
    Exported diagsession file: *.diagsession
    
  3. Selecteer bestand >> openen in Visual Studio en navigeer naar de locatie van het diagsession-bestand en selecteer en open het bestand.

  4. Selecteer het tabblad Benchmarks om gegevens voor de BenchmarkDotNet-benchmarks weer te geven.

    Schermopname van BenchmarkDotNet-gegevens in Visual Studio.

    Zie de benchmarkDotNet-documentatie voor meer informatie over de resultaten op het tabblad Benchmarks.

  5. Klik met de rechtermuisknop op een rij in de resultaten en kies Tijdsbereik selecteren om de tijdlijngrafiek te synchroniseren met de benchmark.

  6. Selecteer een van de beschikbare tabbladen, zoals CPU-gebruik of toewijzingen.

    Afhankelijk van de diagnose die u hebt gebruikt voor het verzamelen van gegevens, kunt u inzichten verkrijgen met betrekking tot geheugentoewijzing, CPU-gebruik, prestatiemeteritems en andere prestatiegegevens. Als u geheugentoewijzingen wilt analyseren, gebruikt u de ingebouwde MemoryDiagnoser door het kenmerk [MemoryDiagnoser] toe te voegen. Zie Diagnosers voor meer informatie.

    Opmerking

    De profiler ondersteunt alleen de [MemoryDiagnoser] en de diagnosers die eerder in dit artikel zijn vermeld.

    Zie het blogbericht Benchmarking met Visual Studio Profiler voor een voorbeeld van het gebruik van de profiler voor het analyseren van geheugentoewijzingen.

    Zie de bijbehorende artikelen in de profileringsdocumentatie om gegevens te analyseren die betrekking hebben op andere tabbladen, zoals CPU-gebruik.

Optimaliseren met Copilot

U kunt optimalisaties voor CPU- en geheugentoewijzingen rechtstreeks vanuit de editor activeren voor uw BenchmarkDotNet-benchmarks met behulp van CodeLens. Dit maakt het afstemmen van prestaties toegankelijker en naadloos, waardoor u problemen met CPU- en geheugentoewijzing kunt vinden en oplossen op de plaats waar u coderen.

Selecteer de CodeLens-indicator boven uw benchmark en selecteer vervolgens de optie Toewijzingen optimaliseren met Copilot.

Schermopname van optimaliseren met Copilot.