BenchmarkDotNet是进行一个用于进行性能基准测试的开源库,可以帮助开发者在.NET 应用程序中测试代码性能。试和它支持多种基准测试类型、详解T性输出格式、何使自定义参数、用B优化统计数据和可视化效果,进行并且对测试结果进行自动分析,试和生成详细的报告。旨在提供一个简单易用且功能强大的工具来测量和分析代码的性能。
BenchmarkDotNet具有以下主要特点:
简单易用:使用BenchmarkDotNet非常简单,只需定义一个包含待测试方法的类,并使用Benchmark特性标记这些方法。BenchmarkDotNet将自动运行这些方法,并提供详细的性能分析报告。
支持多种测试场景:BenchmarkDotNet支持多种测试场景,包括方法级别的基准测试、类级别的基准测试、内存分配测试、多线程测试等。
强大的分析功能:BenchmarkDotNet提供了丰富的分析功能,可以生成各种性能指标报告,如平均执行时间、内存使用情况、GC压力等。它还支持将测试结果导出为CSV、JSON、Markdown等格式,方便进一步分析和比较。
高度可配置:BenchmarkDotNet提供了丰富的配置选项,可以根据需求对测试进行精细调整。用户可以设置测试运行次数、迭代次数、预热次数等参数,以及启用禁用不同的分析器和报告器。
跨平台支持:BenchmarkDotNet可以在Windows、Linux和MacOS等多个平台上运行,并且支持多个不同的运行时,如.NET Framework、.NET Core和Mono等。
下面介绍 BenchmarkDotNet 的基本使用方法和功能。
BenchmarkDotNet 可以作为 NuGet 包安装到项目中:
Install-Package BenchmarkDotNet <ItemGroup> <PackageReference Include="BenchmarkDotnet" Version="0.13.5" /> </ItemGroup>
安装完成后,在需要测试性能的类上使用 [MemoryDiagnoser] 和 [Benchmark] 特性进行标记:
using BenchmarkDotNet.Attributes;using BenchmarkDotNet.Running;[MemoryDiagnoser]public class MyBenchmark{ [Benchmark] public void MyMethod1() { // test code }}class Program{ static void Main(string[] args) { var summary = BenchmarkRunner.Run<MyBenchmark>(); }}
BenchmarkDotNet 支持多种基准测试类型,具体包括以下几类:
在实际测试中,开发者根据自己的需求和测试场景选择不同的测试类型,并通过 BenchmarkDotNet 提供的 API 和属性进行配置。例如,可以设置测试迭代次数、数据规模、运行模式等参数,以使得测试结果更为准确可靠。
SimpleJob 是 BenchmarkDotNet 中的一个属性,用于指定基准测试中的一些参数。下面是 SimpleJob 属性的详细解释:
在类上使用 [SimpleJob] 特性进行标记,并指定相应的测试类型:
using BenchmarkDotNet.Attributes;using BenchmarkDotNet.Jobs;[SimpleJob(RuntimeMoniker.NetCoreApp50, baseline: true)][SimpleJob(RuntimeMoniker.NetCoreApp31)][SimpleJob(RuntimeMoniker.Net472)]public class MyBenchmark{ // test methods}
BenchmarkDotNet 支持多种输出格式,包括以下几种:
可以在类上使用 [MarkdownExporterAttribute.Default] 等特性进行标记,并指定相应的输出格式:
using BenchmarkDotNet.Attributes;using BenchmarkDotNet.Exporters;using BenchmarkDotNet.Loggers;[MarkdownExporterAttribute.Default][HtmlExporter][AsciiDocExporter]public class MyBenchmark{ // test methods}
BenchmarkDotNet 支持多种自定义参数,包括以下几种:
可以在类上使用 [Params]、[ParamsSource] 或 [ArgumentsSource] 特性进行标记,并指定相应的参数:
using System.Collections.Generic;using BenchmarkDotNet.Attributes;public class MyBenchmark{ [Params(10, 100, 1000)] public int N; [ParamsSource(nameof(GetData))] public int Data; public IEnumerable<int> GetData() => new[] { 1, 2, 3 }; [ArgumentsSource(nameof(GetParams))] public void MyMethod(int x, int y) { // test code } public IEnumerable<object[]> GetParams() => new List<object[]> { new object[] { 1, 2 }, new object[] { 3, 4 }, new object[] { 5, 6 } };}
BenchmarkDotNet 对测试结果进行自动分析,生成多种统计数据和可视化效果,包括以下几种:
可以在运行测试后查看控制台输出和生成的报告文件,以便了解测试结果的详细信息和分析结果。
以下是一个使用BenchmarkDotNet进行冒泡排序和快速排序性能测试的示例:
using BenchmarkDotNet.Attributes;using BenchmarkDotNet.Running;using System;public class SortingBenchmark{ private int[] array; [Params(1000, 10000, 100000)] // 定义不同规模的数组作为参数 public int ArraySize { get; set; } [GlobalSetup] public void Setup() { // 初始化待排序的数组 array = new int[ArraySize]; Random random = new Random(); for (int i = 0; i < ArraySize; i++) { array[i] = random.Next(); } } [Benchmark] public void BubbleSort() { // 冒泡排序算法实现 for (int i = 0; i < ArraySize - 1; i++) { for (int j = 0; j < ArraySize - i - 1; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } } [Benchmark] public void QuickSort() { // 快速排序算法实现 QuickSort(array, 0, ArraySize - 1); } private void QuickSort(int[] arr, int low, int high) { if (low < high) { int pivot = Partition(arr, low, high); QuickSort(arr, low, pivot - 1); QuickSort(arr, pivot + 1, high); } } private int Partition(int[] arr, int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp2 = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp2; return i + 1; }}public class Program{ public static void Main(string[] args) { var summary = BenchmarkRunner.Run<SortingBenchmark>(); }}
在上面的示例中,我们首先定义了一个名为`SortingBenchmark`的类,并在其中使用`Params`特性定义了不同规模的数组作为参数。然后,在`GlobalSetup`方法中,我们初始化了待排序的数组。
接下来,我们使用`Benchmark`特性分别标记了冒泡排序和快速排序的测试方法`BubbleSort`和`QuickSort`。在这两个方法中,我们分别实现了冒泡排序和快速排序的算法。
最后,在`Main`方法中,我们使用`BenchmarkRunner.Run`方法来运行基准测试,并生成性能分析报告。
运行上述代码后,BenchmarkDotNet将自动运行冒泡排序和快速排序的测试方法,并生成包含性能分析报告的输出。可以根据需要调整数组规模和其他配置参数,以获取更详细的性能分析结果。
另外在输出目录下,BenchmarkDotnet 会输出性能测试结果文件:
打开 html 版本后看到的跟刚才控制台的是一样的
以上是 BenchmarkDotNet 的基本使用方法和功能。BenchmarkDotNet 有着丰富的 API 和调整参数的选项,可以进行高级性能分析和可视化效果。它可以帮助开发人员优化和改进代码,并提升应用程序的性能和稳定性。
责任编辑:姜华 来源: 今日头条 .NET性能测试开源(责任编辑:休闲)
富瀚微(300613.SZ)公布消息:就收购眸芯科技32.43%股权已完成工商变更登记
评价结果显示:零售业务对商业银行收益可持续能力的贡献不断增强
鑫科材料(600255.SH):向激励对象授予股票期权4969万份 行权价格为2.38元/份