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的话,会抛如下错误的。

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

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

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

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

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

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

译文链接:https://www.infoworld.com/article/3573782/how-to-benchmark-c-code-using-benchmarkdotnet.html

如何使用 BenchmarkDotNet 对 C# 代码进行基准测试相关推荐

  1. JLBH示例1 –为什么应在上下文中对代码进行基准测试

    在这篇文章中: 使用JMH和JLBH进行日期序列化的并排示例 在微基准中测量日期序列化 测量日期序列化作为适当应用程序的一部分 如何为您的JLBH基准添加探针 了解在上下文中衡量代码的重要性 在上一篇 ...

  2. java 微型数据库_Java 9代码工具:使用Java微型基准测试工具的实践会话

    java 微型数据库 用肉眼看,基准测试似乎只是确定执行某些代码需要花费多长时间的简单问题. 但是,通常情况下,这是幼稚的方法. 提供具有准确和可重复结果的有意义的基准并非易事. 在本文中,我们将向您 ...

  3. Java 9代码工具:使用Java微型基准测试工具的实践会话

    用肉眼看,基准测试似乎只是确定执行某些代码需要花费多长时间的简单问题. 但是通常,这是幼稚的方法. 提供具有准确和可重复结果的有意义的基准并非易事. 在本文中,我们想向您介绍OpenJDK代码工具项目 ...

  4. 如何编写高性能的C#代码(二)

    使用Benchmark.NET对C# 代码进行基准测试的简介 在我以前的文章中[10],我介绍了该系列文章[11],在其中我将分享我的经验,同时了解C#和.NET Core(corefx)框架的新性能 ...

  5. .NET Core中的性能测试工具BenchmarkDotnet

    背景介绍 之前一篇博客中,我们讲解.NET Core中的CSV解析库,在文章的最后,作者使用了性能基准测试工具BenchmarkDotNet测试了2个不同CSV解析库的性能,本篇我们来详细介绍一下Be ...

  6. .Net性能测试工具BenchmarkDotnet

    性能基准测试可以帮助程序员对比2个代码段或者方法的性能,这对于代码重写或者重构来说,可以提供一种很好的量化标准.如果没有性能基准测试,很难想象将方法A改为B方法时候,仅凭肉眼如何区分性能的变化. Be ...

  7. 阿里程序员工作小技巧:理解CPU分支预测,提高代码效率

    技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,体现也会在优秀程序员在工作效率提升,产品性能优化和用户体验改善等小技巧方面的分享,以提高我们的工作能力 ...

  8. Java JIT在运行JDK代码时是否作弊?

    本文翻译自:Does Java JIT cheat when running JDK code? I was benchmarking some code, and I could not get i ...

  9. 如何在Java中编写正确的微基准测试?

    您如何用Java编写(并运行)正确的微基准测试? 我正在寻找一些代码示例和注释,以说明要考虑的各种问题. 示例:基准测试应测量时间/迭代或迭代/时间,为什么? 相关: 秒表基准测试是否可以接受? #1 ...

最新文章

  1. idea+maven+ssm搭建boot_crm项目遇到的问题
  2. 表格里面怎么打多个√_Excel怎样在表格里打√?
  3. 决策树编程python_Python如何制定决策:编程中的控制流简介
  4. matlab 转 python_985工科硕士自学转程序员经验
  5. linux部署python web项目 详细_linux下nginx+python+uwsgi部署总结(django+web.py)
  6. Windows下安装和配置NodeJS
  7. 美人计--图片asp木马
  8. 李宏毅机器学习2022-hw2
  9. HTML转PDF(Thymeleaf做模板)
  10. 超越宝典汽配汽修管理系统——“维修业务”模块功能实现
  11. 抖音服务器升级中无法修改名字,抖音名字改不了怎么回事
  12. python代码,用于获取mp3部分信息并存入MySQL中
  13. 移动端以及 PC浏览器页面分享到朋友圈等的功能实现
  14. react 日期怎么格式化_react日期格式化组件
  15. 什么是restful?怎样用通俗的语言解释restful?
  16. SitePoint Podcast#30:Google感染IE
  17. 模仿淘宝web扫码登录
  18. nz-select选项无法默认显示
  19. 2017年的端午节祝福语
  20. Css3+jquery 实现loading加载动画

热门文章

  1. that is why用法
  2. 根据实例类型反射操作数据库(简单通用表操作类)
  3. 【云图】如何设置支付宝里的家乐福全国连锁店地图?
  4. 在 App 扩展和主 App 间共享数据
  5. Windows按名称排序问题
  6. Html中value和name属性的作用
  7. Horspool 字符串快速查找算法
  8. UI设计师应了解最终用户的十件事
  9. [snmp++]读取cisco路由交换机信息[一] - 环境搭建
  10. Win7系统中必需记住的14个常用快捷键