在 Visual Studio 中分析 BenchmarkDotNet 数据

可以使用分析工具在 Visual Studio 中收集和查看 BenchmarkDotNet 数据。

将 BenchmarkDotNet 诊断程序作为属性添加到基准类时,将在基准运行后生成 .diagsession 文件。 然后,可以在 Visual Studio 中打开 .diagsession 并查看基准的分析数据。

支持以下诊断程序:

  • CPUUsageDiagnoser
  • DatabaseDiagnoser
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

每个诊断程序都会生成与该诊断程序相关的性能数据。 例如,CPUUsageDiagnoser 生成一个 .diagsession 文件,其中包含 CPU 数据,DatabaseDiagnoser 生成一个 .diagsession 文件,其中包含数据库作上的数据。 限制对应于关联的分析工具。 例如,探查器的数据库工具适用于 ADO.NETEntity Framework Core

先决条件

收集 Benchmark.NET 数据

  1. 创建控制台项目。

    必须将基准函数添加到 .NET 控制台应用程序。 这些函数可以是引用其他项目类型的包装函数。

  2. 将生成设置为发布版本,而不是调试版本。

  3. 为诊断器和基准设置代码属性,并包括用于运行基准的代码(BenchmarkRunner.Run)。

    将诊断程序名称作为属性添加到包含要为其生成数据的基准的类。

    例如,可以将以下代码用于 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. 运行应用程序以生成 .diagsession 文件。

    检查控制台输出以获取文件的位置。 例如:

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

查看 BenchmarkDotNet 数据

  1. 在 Visual Studio 中,选择 “文件 > 打开 > 文件 ”并导航到 .diagsession 文件的位置,然后选择并打开该文件。

  2. 选择“ 基准” 选项卡以查看 BenchmarkDotNet 基准的数据。

    Visual Studio 中 BenchmarkDotNet 数据的屏幕截图。

    有关 “基准” 选项卡中的结果的详细信息,请参阅 BenchmarkDotNet 文档。

  3. 右键单击结果中的行,然后选择 “选择时间范围 ”以将时间线图与基准同步。

  4. 选择可用选项卡之一,例如 CPU 使用率分配

    根据用于收集数据的诊断程序,可以获得与内存分配、CPU 使用率、计数器和其他性能数据相关的见解。 若要分析内存分配,请通过添加 [ MemoryDiagnoser] 属性来使用内置的 MemoryDiagnoser 。 有关详细信息,请参阅 诊断程序

    注释

    探查器仅支持本文前面列出的 [MemoryDiagnoser] 和诊断程序。

    有关使用探查器分析内存分配的示例,请参阅博客文章 “使用 Visual Studio Profiler 进行基准测试”。

    若要分析与其他选项卡(如 CPU 使用情况)相关的数据,请参阅分析文档中的相应文章。