Sdílet prostřednictvím


Analýza dat BenchmarkDotNet v sadě Visual Studio

Pomocí nástrojů pro profilaci můžete shromažďovat a zobrazovat data BenchmarkDotNet v sadě Visual Studio. BenchmarkDotNet je opensourcová knihovna .NET navržená pro srovnávací testy výkonu. Automatizuje proces měření a porovnává dobu provádění, využití paměti a další metriky výkonu kódu .NET spolehlivým a opakovatelným způsobem.

BenchmarkDotNet použijete tak, že do projektu nainstalujete požadované balíčky NuGet a pak do kódu přidáte atributy, které odpovídají typu informací o výkonu, které vás zajímají.

Požadavky

Nastavení projektu

Atributy srovnávacího testu musí být přidány do konzolové aplikace .NET. Atributy lze přidat do funkcí obálky, které odkazují na jiné typy projektů.

K přípravě projektu na podporu BenchmarkDotNet použijte jednu z následujících metod:

  • Otevřete existující projekt konzoly nebo vytvořte nový projekt konzoly. V tomto scénáři ručně přidáte podporu BenchmarkDotNet.

  • Použijte šablonu projektu srovnávacího testu . Některé kroky popsané v tomto článku jsou vyžadovány pouze v případě, že ručně přidáte podporu BenchmarkDotNet.

    Šablona projektu Benchmark generuje plně integrovaný projekt BenchmarkDotNet s vestavěnou podporou profilace využití CPU a přehledů nástroje Copilot. Pokud chcete šablonu použít, vyberte Profilování ze seznamu typů projektů při vytváření nového projektu a pak zvolte Srovnávací projekt. Informace o atributech naleznete v tématu Atribut kódu.

Snímek obrazovky se šablonou BenchmarkDotNet v sadě Visual Studio

Vytvořte projekt konzoly nebo použijte existující projekt konzoly.

Atributy srovnávacího testu musí být přidány do konzolové aplikace .NET. Atributy lze přidat do funkcí obálky, které odkazují na jiné typy projektů.

Přiřaďte svůj kód

Když do tříd srovnávacích testů přidáte diagnostiku BenchmarkDotNet jako atribut, nakonfigurujete aplikaci tak, aby po spuštění srovnávacích testů vygenerovala soubor .diagsession . Pak můžete otevřít soubor .diagsession ve Visual Studio a zobrazit data z profilování srovnávacích testů.

Podporují se následující diagnostiky:

  • Diagnostik Využití CPU
  • DatabaseDiagnoser
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

Každý diagnostik generuje údaje o výkonu související s tímto diagnostikem. Například cpuUsageDiagnoser vygeneruje soubor .diagsession s daty procesoru a DatabaseDiagnoser vygeneruje soubor .diagsession s daty o databázových operacích. Omezení odpovídají přidruženému nástroji pro profilaci. Například databázový nástroj profileru funguje na ADO.NET nebo Entity Framework Core.

Atribut kódu pro diagnostiky a srovnávací testy:

  1. Přidejte název diagnostiky jako atribut do třídy, která obsahuje srovnávací testy, pro které chcete generovat data.

  2. Benchmark Přidejte atribut do metod, které chcete otestovat pro výkon.

    Můžete například použít následující kód pro CPUUsageDiagnoser.

    Pokud používáte šablonu srovnávacího projektu , ukázkový kód už je v šabloně uvedený. Pokud ručně přidáváte podporu BenchmarkDotNet, můžete použít následující ukázkový kód.

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

Shromažďování a zobrazení dat Benchmark.NET

  1. Místo sestavení Ladění nastavte sestavení na build vydané verze .

  2. Spuštěním aplikace vygenerujte soubor .diagsession .

    Zkontrolujte výstup konzoly a získejte umístění souboru. Například:

    // * Diagnostic Output - VSDiagnosticsDiagnoser * 
    Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'.
    Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4}
      Stopped
    Exported diagsession file: *.diagsession
    
  3. V sadě Visual Studio vyberte Soubor > Otevřít > soubor a přejděte do umístění souboru .diagsession, poté soubor vyberte a otevřete.

  4. Výběrem karty Srovnávací testy zobrazíte data pro srovnávací testy BenchmarkDotNet.

    Snímek obrazovky s daty z BenchmarkDotNet ve Visual Studio.

    Pro více informací o výsledcích v kartě Benchmarks si přečtěte dokumentaci k BenchmarkDotNet.

  5. Pravým tlačítkem myši klikněte na řádek ve výsledcích a zvolte Vybrat časový rozsah pro synchronizaci grafu časové osy s srovnávacím testem.

  6. Vyberte jednu z dostupných karet, například Využití procesoru nebo Přidělení.

    V závislosti na diagnostice, který jste použili ke shromažďování dat, můžete získat přehledy týkající se přidělení paměti, využití procesoru, čítačů a dalších dat o výkonu. K analýze přidělení paměti použijte integrovaný MemoryDiagnoser přidáním atributu [MemoryDiagnoser]. Další informace naleznete v tématu Diagnostikátoři.

    Poznámka:

    Profiler podporuje pouze nástroj [MemoryDiagnoser] a diagnostiky uvedené dříve v tomto článku.

    Příklad použití profileru k analýze přidělení paměti najdete v blogovém příspěvku o srovnávacích testech pomocí nástroje Visual Studio Profiler.

    Pokud chcete analyzovat data související s jinými kartami, jako je využití procesoru, přečtěte si odpovídající články v dokumentaci k profilaci.

Optimalizace pomocí Copilotu

Optimalizace přidělení procesoru a paměti pro srovnávací testy BenchmarkDotNet můžete aktivovat přímo z editoru pomocí CodeLens. Díky tomu je ladění výkonu přístupnější a plynulejší, což vám pomůže najít a opravit problémy s přidělením procesoru a paměti přímo tam, kde kódujete.

Vyberte indikátor CodeLens nad srovnávacím testem a pak vyberte možnost Optimalizovat přidělení pomocí Copilotu.

Snímek obrazovky s optimalizací pomocí Copilotu