服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 使用 BenchmarkDotNet 对 C# 代码进行基准测试

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

2022-11-08 12:16码农读书 C#

这篇文章主要介绍了使用 BenchmarkDotNet 对 C# 代码进行基准测试,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下

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

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

安装 BenchmarkDotNet

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

?
1
Install-Package BenchmarkDotNet

什么是基准测试

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

创建基准测试代码

新建 BenchmarkDotNet 类,类定义如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    [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 方法中启动 基准测试,代码如下:

?
1
2
3
4
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 列,修改代码如下:

?
1
2
3
4
5
    [MemoryDiagnoser, RankColumn]
    public class MemoryBenchmarkerDemo
    {
        ...
    }

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

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

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

以上就是使用 BenchmarkDotNet 对 C# 代码进行基准测试的详细内容,更多关于BenchmarkDotNet 对 C# 代码进行基准测试的资料请关注服务器之家其它相关文章!

原文链接:https://mp.weixin.qq.com/s?__biz=MzU4Mjc4NzgyOQ==&mid=2247488777&idx=1&sn=6f4c5e91f12ed3a50cc26662c0593759

延伸 · 阅读

精彩推荐
  • C#C#操作SQLite数据库帮助类详解

    C#操作SQLite数据库帮助类详解

    这篇文章主要介绍了C#操作SQLite数据库帮助类,详细分析了C#针对sqlite数据库的连接、查询、分页等各种常见操作的实现与封装技巧,需要的朋友可以参考下...

    Only Version5102022-01-17
  • C#c#设计模式 适配器模式详细介绍

    c#设计模式 适配器模式详细介绍

    结构模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构。结构模式描述两种不同的东西:类与类的实例。根据这一点,结构模式可以...

    C#教程网6992021-04-14
  • C#C# 如何合并和拆分PDF文件

    C# 如何合并和拆分PDF文件

    这篇文章主要介绍了C# 如何合并和拆分PDF文件,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...

    Dwaynerbing11542022-10-29
  • C#C#动态对象(dynamic)详解(实现方法和属性的动态)

    C#动态对象(dynamic)详解(实现方法和属性的动态)

    下面小编就为大家带来一篇C#动态对象(dynamic)详解(实现方法和属性的动态)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来...

    C#教程网7292021-12-27
  • C#C#中获取数据的方法实例

    C#中获取数据的方法实例

    这篇文章主要给大家介绍了关于C#中获取数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    骑着母猪去兜风8642022-10-31
  • C#C#实现多个计时器记录不同定时时间

    C#实现多个计时器记录不同定时时间

    这篇文章主要为大家详细介绍了C#实现多个计时器记录不同定时时间,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    风无痕丶11492022-10-25
  • C#Unity实现多平台二维码扫描

    Unity实现多平台二维码扫描

    这篇文章主要为大家详细介绍了Unity实现多平台二维码扫描,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    阿循6602022-07-29
  • C#在C#使用字典存储事件示例及实现自定义事件访问器

    在C#使用字典存储事件示例及实现自定义事件访问器

    这篇文章主要介绍了在C#使用字典存储事件示例及实现自定义事件访问器的方法,是C#事件编程中的基础知识,需要的朋友可以参考下...

    C#教程网5932021-11-11