Condividi tramite


Analizzare i dati BenchmarkDotNet in Visual Studio

È possibile usare gli strumenti di profilatura per raccogliere e visualizzare i dati benchmarkDotNet in Visual Studio.

Quando si aggiunge un diagnostico BenchmarkDotNet alle classi di benchmark come attributo, viene generato un file con estensione diagsession dopo l'esecuzione del benchmark. È quindi possibile aprire il .diagsession in Visual Studio e visualizzare i dati di profiling per i benchmark.

Sono supportati i seguenti diagnostici:

  • CPUUsageDiagnoser
  • DatabaseDiagnoser
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

Ogni diagnostico genera dati sulle prestazioni correlati a tale diagnostico. Ad esempio, CPUUsageDiagnoser genera un file con estensione diagsession con dati della CPU e DatabaseDiagnoser genera un file con estensione diagsession con dati sulle operazioni del database. Le limitazioni corrispondono allo strumento di profilatura associato. Ad esempio, lo strumento database del profiler funziona su ADO.NET o Entity Framework Core.

Prerequisiti

Raccogliere dati Benchmark.NET

  1. Creare un progetto console.

    Le funzioni di benchmark devono essere aggiunte a un'applicazione console .NET. Queste funzioni possono essere funzioni wrapper che fanno riferimento ad altri tipi di progetto.

  2. Impostare la compilazione su una build di rilascio anziché su una build di debug.

  3. Attribuire il codice per gli diagnostici e i benchmark e includere il codice per eseguire i benchmark (BenchmarkRunner.Run).

    Aggiungere il nome del diagnostico come attributo alla classe che contiene i benchmark per i quali si desidera generare dati.

    Ad esempio, è possibile usare il codice seguente per CPUUsageDiagnoser.

    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);
            }
        }
    }
    
  4. Eseguire l'applicazione per generare il file .diagsession.

    Controllare l'output della console per ottenere il percorso del file. Per esempio:

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

Visualizzare i dati di BenchmarkDotNet

  1. In Visual Studio selezionare File > Apri > File e passare al percorso del file con estensione .diagsession, quindi selezionare e aprire il file.

  2. Selezionare la scheda Benchmarks (Benchmark) per visualizzare i dati per i benchmark BenchmarkDotNet.

    Schermata dei dati di BenchmarkDotNet in Visual Studio.

    Per altre informazioni sui risultati nella scheda Benchmark, vedere la documentazione di BenchmarkDotNet .

  3. Fare clic con il pulsante destro del mouse su una riga nei risultati e scegliere Seleziona intervallo di tempo per sincronizzare il grafico della sequenza temporale con il benchmark.

  4. Selezionare una delle schede disponibili, ad esempio Utilizzo CPU o Allocazioni.

    A seconda del diagnostico usato per raccogliere dati, è possibile ottenere informazioni dettagliate relative all'allocazione della memoria, all'utilizzo della CPU, ai contatori e ad altri dati sulle prestazioni. Per analizzare le allocazioni di memoria, usare l'attributo MemoryDiagnoser predefinito aggiungendo l'attributo [MemoryDiagnoser]. Per altre informazioni, vedere Diagnostici.

    Annotazioni

    Il profiler supporta solo [MemoryDiagnoser] e i diagnostici elencati in precedenza in questo articolo.

    Per un esempio di uso del profiler per analizzare le allocazioni di memoria, vedere il post di blog Benchmarking with Visual Studio Profiler (Benchmarking con Visual Studio Profiler).

    Per analizzare i dati correlati ad altre schede, ad esempio Utilizzo CPU, vedere gli articoli corrispondenti nella documentazione sulla profilatura.