Dela via


Analysera BenchmarkDotNet-data i Visual Studio

Du kan använda profileringsverktygen för att samla in och visa BenchmarkDotNet-data i Visual Studio.

När du lägger till en BenchmarkDotNet-diagnostik i dina benchmark-klasser som ett attribut genereras en .diagsession-fil efter att benchmark-körningen har körts. Du kan sedan öppna .diagsession i Visual Studio och visa profileringsdata för testresultaten.

Följande diagnostiker stöds:

  • CPUUsageDiagnoser
  • Databasdiagnostiker
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

Varje diagnostik genererar prestandadata som är relaterade till den diagnostiken. CpuUsageDiagnoser genererar till exempel en .diagsession-fil med CPU-data i och DatabaseDiagnoser genererar en .diagsession-fil med data om databasåtgärder. Begränsningar motsvarar det associerade profileringsverktyget. Profilerarens databasverktyg fungerar till exempel på ADO.NET eller Entity Framework Core.

Förutsättningar

Skapa projektet

Benchmark-funktionerna måste läggas till i ett .NET-konsolprogram. Dessa funktioner kan vara omslutningsfunktioner som refererar till andra projekttyper.

Du kan antingen skapa ett konsolprojekt och lägga till BenchmarkDotNet-stöd manuellt eller använda benchmark-projektmallen . Vissa av stegen som beskrivs i den här artikeln krävs endast när du lägger till BenchmarkDotNet-stöd manuellt.

Benchmark Project-mallen genererar ett helt integrerat BenchmarkDotNet-projekt med inbyggt stöd för profilering av processoranvändning och Copilot-insikter. Om du vill använda mallen väljer du Profilering från listan med projekttyper när du skapar ett nytt projekt och väljer sedan Benchmark-projekt.

Skärmbild av BenchmarkDotNet-mall i Visual Studio.

Skapa ett konsolprojekt.

Benchmark-funktionerna måste läggas till i ett .NET-konsolprogram. Dessa funktioner kan vara omslutningsfunktioner som refererar till andra projekttyper.

Samla in Benchmark.NET data

  1. Ställ in bygget på en versionsversion i stället för en felsökningsversion.

  2. Attribut din kod för diagnostiker och benchmarks, och inkludera kod för att köra benchmarks (BenchmarkRunner.Run).

    Lägg till diagnostiknamnet som ett attribut till klassen som innehåller de riktmärken som du vill generera data för.

    Du kan till exempel använda följande kod för CPUUsageDiagnoser.

    Om du använder mallen Benchmark Project finns exempelkoden redan i mallen. Om du lägger till BenchmarkDotNet-stöd manuellt kan du använda följande exempelkod.

    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);
            }
        }
    }
    
  3. Kör programmet för att generera .diagsession-filen .

    Kontrollera konsolens utdata för att se platsen för filen. Till exempel:

    // * Diagnostic Output - VSDiagnosticsDiagnoser * 
    Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'.
    Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4}
      Stopped
    Exported diagsession file: *.diagsession
    

Visa BenchmarkDotNet–data

  1. I Visual Studio väljer du Öppna > fil > och navigerar till platsen för .diagsession-filen och väljer sedan och öppnar filen.

  2. Välj fliken Benchmarks för att visa data för BenchmarkDotNet-riktmärken.

    Skärmbild av BenchmarkDotNet-data i Visual Studio.

    Mer information om resultaten på fliken Benchmarks finns i Dokumentation om BenchmarkDotNet .

  3. Högerklicka på en rad i resultatet och välj Välj tidsintervall för att synkronisera tidslinjediagrammet med riktmärket.

  4. Välj någon av de tillgängliga flikarna, till exempel CPU-användning eller Allokeringar.

    Beroende på vilken diagnostik du använde för att samla in data kan du få insikter om minnesallokering, CPU-användning, räknare och andra prestandadata. Om du vill analysera minnesallokeringar använder du den inbyggda MemoryDiagnoser genom att lägga till attributet [MemoryDiagnoser]. Mer information finns i Diagnoser.

    Anmärkning

    Profileraren stöder endast [MemoryDiagnoser] och diagnostikerna som anges tidigare i den här artikeln.

    Ett exempel på hur du använder profileraren för att analysera minnesallokeringar finns i blogginlägget Benchmarking med Visual Studio-profileraren.

    Information om hur du analyserar data som rör andra flikar, till exempel CPU-användning, finns i motsvarande artiklar i dokumentationen för profilering.