使用 BenchmarkDotNet 对 C# 代码进行基准测试

作者:码农读书 时间:2023-06-25 00:38:49 

目录
  • 安装 BenchmarkDotNet

  • 什么是基准测试

  • 创建基准测试代码

  • 运行 benchmark

BenchmarkDotNet 是一个轻量级,开源的,强大的 .NET 工具包,它可以将你的方法转化为基准并跟踪这些方法,最后对这些方法的性能提供一些测试报告,使用 BenchmarkDotNet 玩 基准测试 是非常容易的。

你可以利用 BenchmarkDotNet 在 .NET Framework 和 .NET Core 应用程序上实现基准测试,在这篇文章中,我们将会讨论如何在 .NET Core 中实现基准测试。

安装 BenchmarkDotNet

要想使用 BenchmarkDotNet,要么通过 Nuget 可视化窗口安装 BenchmarkDotNet,要么使用NuGet Package Manager Console 命令行窗口输入如下命令。


Install-Package BenchmarkDotNet

什么是基准测试

基准测试 是对应用程序的一段代码的性能提供一个或者一组度量值,度量代码本质上来说就是让你清楚的了解你的应用程序的性能到底是怎么样的,当你想优化代码的时候,如果手边有这些性能度量值那该有多好呀~ 基准测试也可以帮助我们缩小到那些必须要重构的代码。

创建基准测试代码

新建 BenchmarkDotNet 类,类定义如下


    [MemoryDiagnoser]
    public class MemoryBenchmarkerDemo
    {
        int NumberOfItems = 100000;
        [Benchmark]
        public string ConcatStringsUsingStringBuilder()
        {
            var sb = new StringBuilder();
            for (int i = 0; i < NumberOfItems; i++)
            {
                sb.Append("Hello World!" + i);
            }
            return sb.ToString();
        }

        [Benchmark]
        public string ConcatStringsUsingGenericList()
        {
            var list = new List<string>(NumberOfItems);
            for (int i = 0; i < NumberOfItems; i++)
            {
                list.Add("Hello World!" + i);
            }
            return list.ToString();
        }
    }

上面的代码展示了如何做 基准测试, 做法很简单,在方法上标记 Benchmark 特性即可,接下来就可以 Main 方法中启动 基准测试,代码如下:


static void Main(string[] args)
{
   var summary = BenchmarkRunner.Run<MemoryBenchmarkerDemo>();
}

运行 benchmark

值得注意的是,一定要用 release 模式运行,如果用debug的话,会抛如下错误的。

使用 BenchmarkDotNet 对 C# 代码进行基准测试

调整为 release 模式后,将程序跑起来,要稍微跑一段时间,最后将会看到 console 输出如下的 summary。

使用 BenchmarkDotNet 对 C# 代码进行基准测试

从图中可以看到,summary中会包含比如:BenchmarkDotNet版本,操作系统,计算机硬件,.NET版本,编译器信息和一些应用程序相关的性能信息,从图中也可以看出 ConcatStringUsingStringBuilder 方法比  ConcatStringUsingGenericList 方法性能更高,付出的代价就是占用更多的内存。

接下来在 MemoryBenchmarkerDemo 类上标注 RankColumn 标记,这样会在输出结构中多一个给程序排名的 Rank 列,修改代码如下:


    [MemoryDiagnoser, RankColumn]
    public class MemoryBenchmarkerDemo
    {
        ...
    }

接下来再将程序跑起来,观察最后的 summary,可以清楚的看到多了一个 Rank 列。

使用 BenchmarkDotNet 对 C# 代码进行基准测试

BenchmarkDotNet 提供了一种简单的方式让你拥有了对应用程序的性能知情权,如果你想了解更多关于如何在 ASP.NET Core 中使用 BenchmarkDotNet,参考github:https://github.com/aspnet/benchmarks

来源:https://mp.weixin.qq.com/s?__biz=MzU4Mjc4NzgyOQ==&mid=2247488777&idx=1&sn=6f4c5e91f12ed3a50cc26662c0593759

标签:c#,基准测试,BenchmarkDotNet
0
投稿

猜你喜欢

  • 详解Android Studio 3.0的新特性与适配

    2023-04-29 05:15:05
  • 如何在Springboot实现拦截器功能

    2023-01-10 01:11:38
  • C#实现线程安全的简易日志记录方法

    2023-12-20 22:45:17
  • 详解Java弱引用(WeakReference)的理解与使用

    2022-07-13 12:37:32
  • C#统计字符串里中文汉字个数的方法

    2022-05-12 21:47:10
  • Android编程基于重力传感器实现横竖屏放向切换功能

    2022-11-30 00:38:54
  • java制作简单验证码功能

    2022-12-07 02:12:46
  • java 发送http和https请求的实例

    2023-11-29 12:46:52
  • 解决logback-classic 使用testCompile的打包问题

    2021-07-01 08:16:50
  • C#开发微信门户及应用(4) 关注用户列表及详细信息管理

    2023-06-05 07:40:43
  • Java map为什么不能遍历的同时进行增删操作

    2023-12-21 17:28:29
  • ThreadLocal的set方法原理示例解析

    2023-11-09 15:06:09
  • Android编程实现AlertDialog自定义弹出对话框的方法示例

    2022-09-13 19:34:45
  • Java四种权限修饰符知识点详解

    2023-11-11 06:12:59
  • C# 重写ComboBox实现下拉任意组件的方法

    2022-01-24 03:07:29
  • Springboot启动执行特定代码的方式汇总

    2023-08-06 04:42:24
  • Java实战宠物店在线交易平台的实现流程

    2022-07-06 22:04:37
  • 自定义AlertDialog去除黑色背景的解决方法

    2023-05-18 09:56:17
  • C#实现围棋游戏

    2022-04-20 11:08:57
  • 详解Java如何在Array和List之间进行转换

    2023-05-27 07:37:27
  • asp之家 软件编程 m.aspxhome.com