可以使用分析工具在 Visual Studio 中收集和查看 BenchmarkDotNet 数据。
将 BenchmarkDotNet 诊断程序作为属性添加到基准类时,将在基准运行后生成 .diagsession 文件。 然后,可以在 Visual Studio 中打开 .diagsession 并查看基准的分析数据。
支持以下诊断程序:
- CPUUsageDiagnoser
- DatabaseDiagnoser
- DotNetCountersDiagnoser
- EventsDiagnoser
- FileIODiagnoser
每个诊断程序都会生成与该诊断程序相关的性能数据。 例如,CPUUsageDiagnoser 生成一个 .diagsession 文件,其中包含 CPU 数据,DatabaseDiagnoser 生成一个 .diagsession 文件,其中包含数据库作上的数据。 限制对应于关联的分析工具。 例如,探查器的数据库工具适用于 ADO.NET 或 Entity Framework Core。
先决条件
Visual Studio 2022 版本 17.9 或更高版本
基准项目必须包含以下两个 NuGet 包:
收集 Benchmark.NET 数据
创建控制台项目。
必须将基准函数添加到 .NET 控制台应用程序。 这些函数可以是引用其他项目类型的包装函数。
将生成设置为发布版本,而不是调试版本。
为诊断器和基准设置代码属性,并包括用于运行基准的代码(
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); } } }
运行应用程序以生成 .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 数据
在 Visual Studio 中,选择 “文件 > 打开 > 文件 ”并导航到 .diagsession 文件的位置,然后选择并打开该文件。
选择“ 基准” 选项卡以查看 BenchmarkDotNet 基准的数据。
有关 “基准” 选项卡中的结果的详细信息,请参阅 BenchmarkDotNet 文档。
右键单击结果中的行,然后选择 “选择时间范围 ”以将时间线图与基准同步。
选择可用选项卡之一,例如 CPU 使用率 或 分配。
根据用于收集数据的诊断程序,可以获得与内存分配、CPU 使用率、计数器和其他性能数据相关的见解。 若要分析内存分配,请通过添加 [ MemoryDiagnoser] 属性来使用内置的 MemoryDiagnoser 。 有关详细信息,请参阅 诊断程序。
注释
探查器仅支持本文前面列出的 [MemoryDiagnoser] 和诊断程序。
有关使用探查器分析内存分配的示例,请参阅博客文章 “使用 Visual Studio Profiler 进行基准测试”。
若要分析与其他选项卡(如 CPU 使用情况)相关的数据,请参阅分析文档中的相应文章。