Partager via


Analyser les données BenchmarkDotNet dans Visual Studio

Vous pouvez utiliser les outils de profilage pour collecter et afficher les données BenchmarkDotNet dans Visual Studio. BenchmarkDotNet est une bibliothèque .NET open source conçue pour l’évaluation des performances. Il automatise le processus de mesure et de comparaison du temps d’exécution, de l’utilisation de la mémoire et d’autres métriques de performances de votre code .NET de manière fiable et reproductible.

Vous utilisez BenchmarkDotNet en installant les packages NuGet requis dans votre projet, puis en ajoutant des attributs à votre code qui correspondent au type d’informations de performances qui vous intéressent.

Conditions préalables

Configuration de votre projet

Les attributs de benchmark doivent être ajoutés à une application console .NET. Les attributs peuvent être ajoutés aux fonctions wrapper qui référencent d’autres types de projet.

Pour préparer votre projet pour la prise en charge de BenchmarkDotNet, utilisez l’une des méthodes suivantes :

  • Ouvrez un projet de console existant ou créez un projet de console. Dans ce scénario, vous ajoutez manuellement la prise en charge de BenchmarkDotNet.

  • Utilisez le modèle de projet benchmark . Certaines des étapes décrites dans cet article ne sont requises que lorsque vous ajoutez manuellement la prise en charge de BenchmarkDotNet.

    Le modèle Benchmark Project génère un projet BenchmarkDotNet entièrement intégré avec prise en charge du profilage de l’utilisation du processeur et des fonctionnalités Copilot. Pour utiliser le modèle, sélectionnez Profilage dans la liste des types de projets lorsque vous créez un projet, puis choisissez Benchmark Project. Pour plus d’informations sur les attributs, consultez Attribut de votre code.

Capture d’écran du modèle BenchmarkDotNet dans Visual Studio.

Créez un projet de console ou utilisez un projet de console existant.

Les attributs de benchmark doivent être ajoutés à une application console .NET. Les attributs peuvent être ajoutés aux fonctions wrapper qui référencent d’autres types de projet.

Attribuez votre code

Lorsque vous ajoutez un diagnostic BenchmarkDotNet à vos classes de benchmark en tant qu’attribut, vous configurez l’application pour générer un fichier .diagsession après l’exécution des benchmarks. Vous pouvez ensuite ouvrir le fichier .diagsession dans Visual Studio et afficher les données de profilage pour les benchmarks.

Les diagnostics suivants sont pris en charge :

  • CPUUsageDiagnoser
  • DatabaseDiagnoser
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

Chaque diagnostic génère des données de performances liées à ce diagnostic. Par exemple, UCUsageDiagnoser génère un fichier .diagsession contenant des données d’UC, tandis que DatabaseDiagnoser génère un fichier .diagsession avec des données sur les opérations de base de données. Les limitations correspondent à l’outil de profilage associé. Par exemple, l’outil de base de données du profileur fonctionne sur ADO.NET ou Entity Framework Core.

Pour attribuer votre code aux diagnostics et aux benchmarks :

  1. Ajoutez le nom du diagnostic en tant qu’attribut à la classe qui contient les benchmarks pour lesquels vous souhaitez générer des données.

  2. Ajoutez l’attribut Benchmark aux méthodes que vous souhaitez tester pour les performances.

    Par exemple, vous pouvez utiliser le code suivant pour le CPUUsageDiagnoser.

    Si vous utilisez le modèle de projet benchmark , l’exemple de code est déjà fourni dans le modèle. Si vous ajoutez manuellement la prise en charge de BenchmarkDotNet, vous pouvez utiliser l’exemple de code suivant.

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

Collecter et afficher des données de Benchmark.NET

  1. Définissez votre version sur une version Release au lieu d’une version de débogage.

  2. Exécutez l’application pour générer le fichier .diagsession .

    Vérifiez la sortie de la console pour obtenir l’emplacement du fichier. Par exemple:

    // * Diagnostic Output - VSDiagnosticsDiagnoser * 
    Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'.
    Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4}
      Stopped
    Exported diagsession file: *.diagsession
    
  3. Dans Visual Studio, sélectionnez Fichier > Ouvrir > Fichier et accédez à l’emplacement du fichier .diagsession, puis sélectionnez et ouvrez le fichier.

  4. Sélectionnez l’onglet Benchmarks pour afficher les données des benchmarks BenchmarkDotNet.

    Capture d’écran des données BenchmarkDotNet dans Visual Studio.

    Pour plus d’informations sur les résultats de l’onglet Benchmarks , consultez la documentation BenchmarkDotNet .

  5. Cliquez avec le bouton droit sur une ligne dans les résultats et choisissez Sélectionner un intervalle de temps pour synchroniser le graphique de chronologie avec le benchmark.

  6. Sélectionnez l’un des onglets disponibles, tels que l’utilisation du processeur ou les allocations.

    Selon le diagnostic que vous avez utilisé pour collecter des données, vous pouvez obtenir des insights sur l’allocation de mémoire, l’utilisation du processeur, les compteurs et d’autres données de performances. Pour analyser les allocations de mémoire, utilisez le MemoryDiagnoser intégré en ajoutant l’attribut [MemoryDiagnoser]. Pour plus d’informations, consultez Diagnostiqueurs.

    Remarque

    Le profileur prend uniquement en charge [MemoryDiagnoser] et les diagnostics répertoriés précédemment dans cet article.

    Pour obtenir un exemple d’utilisation du profileur pour analyser les allocations de mémoire, consultez le billet de blog Benchmark avec Visual Studio Profiler.

    Pour analyser les données relatives à d’autres onglets tels que l’utilisation du processeur, consultez les articles correspondants dans la documentation de profilage.

Optimiser avec Copilot

Vous pouvez déclencher des optimisations d’allocation de processeur et de mémoire pour vos benchmarks BenchmarkDotNet directement à partir de l’éditeur à l’aide de CodeLens. Cela rend le réglage des performances plus accessible et transparent, ce qui vous permet de trouver et de résoudre les problèmes d’allocation de processeur et de mémoire là où vous codez.

Sélectionnez l’indicateur CodeLens au-dessus de votre benchmark, puis sélectionnez l’option Optimiser les allocations avec Copilot.

Capture d’écran de l’optimisation avec Copilot.