今天,我们将研究如何使用Benchmark.Net来测试代码性能。借助基准测试,我们可以创建基准来验证所做的更改是否按预期工作并且不会导致性能下降。

并非每个项目都需要进行基准测试,但是如果您正在开发的是NuGet程序包或通用dll,则很有意义。我们将使用它来解决一个古老的问题,字符串拼接,比如下面这样:

string myString = "string1" + "string2" + "string3" + "string4" + "string5";
Console.WriteLine(myString);

我们很多人都知道建议使用StringBuilder作为替代方法,并且速度要快得多,特别是在您有很多字符串的情况下。

StringBuilder sb = new StringBuilder();
sb.Append("string1");
sb.Append("string2");
sb.Append("string3");
sb.Append("string4");
sb.Append("string5");
Console.WriteLine(sb.ToString());

Benchmark.NET

首先,我们需要创建一个控制台项目,BenchmarkTesting.App

接下来,我们添加NuGet包 BenchmarkDotNet

然后,修改 program.cs文件中,把可访问性改成 public

现在我们可以创建一些测试方法,我们直接修改program.cs, 每个测试方法都需要 [Benchmark] 特性,我创建了三个示例,分别使用+运算符,Linq的Concat函数和使用StringBuilder拼接。

最后,在控制台应用程序的Main入口点中,添加 BenchmarkRunning Run命令:

然后我们使用下边的命令运行测试,或者直接使用VS启动项目,需要切换到Release模式下

dotnet run -p BenchmarkTesting.app.csproj -c Release

运行大约需要几分钟,基准测试工具在后台创建大量线程/作业并多次运行测试,为了获得一致的结果,建议最小化打开的应用程序,并且在运行时不要执行任何其他操作,输出如下所示,其中包含很多信息。

单位"us"是"μs"或微秒的缩写,一微秒等于一毫秒的1/1000。

由此可见,StringBuilder要比+运算符效率更高,Linq Concat函数也相对高效,但还是没有StringBuilder快。

总结

拼接字符串时使用StringBuilder!本篇文章只是简单作的做了介绍,Benchmark.NET是测试性能的非常强大的工具,如果需要构建Nuget包,或者开发通用类库时,这将是一种很好的测试方法。

原文链接: https://samlearnsazure.blog/2021/01/12/measuring-code-performance-with-benchmark-net/[1]

欢迎关注我们的公众号 【全球技术精选】,专注国外优秀博客的翻译和开源项目分享,也可以添加QQ群 897216102

使用 Benchmark.NET 测试代码性能相关推荐

  1. as ssd测试软件得分少,教大家AS SSD Benchmark如何测试硬盘性能

    近日有关于AS SSD Benchmark如何测试硬盘性能的问题受到了很多网友们的关注,大多数网友都想要知道AS SSD Benchmark如何测试硬盘性能的具体情况,那么关于到AS SSD Benc ...

  2. 不要再用main方法测试代码性能了,用这款JDK自带工具

    前言 作为软件开发人员,我们通常会写一些测试程序用来对比不同算法.不同工具的性能问题.而最常见的做法是写一个main方法,构造模拟场景进行并发测试. 如果细心的朋友可能已经发现,每次测试结果误差很大, ...

  3. python测试代码性能_使用python timeit 模块检测代码性能

    使用Python 通常在乎的是它的开发效率,而不是运行性能. 但如果通过很简单的方法可以测试出n种不同的写法之间的性能差异,这个过程本身也是一种乐趣. python 自带了timeit 模块,可以在代 ...

  4. 使用 BenchmarkDotnet 测试代码性能

    先来点题外话,清明节前把工作辞了(去 tm 的垃圾团队,各种拉帮结派.勾心斗角).这次找工作就得慢慢找了,不能急了,希望能找到个好团队,好岗位吧.顺便这段时间也算是比较闲,也能学习一下和填掉手上的坑. ...

  5. cesium three性能比较_Go学习_21_Golang代码性能检测Benchmark

    Golang的testing包中除了单元测试testing.T之外,还提供了testing.B的Benchmark性能测试,Benchmark测试主要是通过测试CPU和内存的效率,来评估测试代码的性能 ...

  6. Go语言——测试与性能

    篇幅较长,建议先收藏 文章目录 测试与性能 1. 测试 1.1 单元测试 1. 第一个测试函数 2. 表组测试 3. 模拟测试 △ 1. HTTP mock 2. 数据库 mock mysql:go- ...

  7. ab 发送post请求测试API性能

    apache benchmark 工具 测试API 性能发送 Post 请求(Linux环境验证通过) 在apache bin 目录,在linux上执行命令: ./ab -n 1 -v 4 -p 'u ...

  8. ab 发送post请求 测试API性能

    apache benchmark 工具 测试API 性能发送 Post 请求(Linux环境验证通过) 在apache bin 目录,在linux上执行命令: ./ab -n 1 -v 4 -p 'u ...

  9. 提高C++性能的编程技术笔记:设计优化/可扩展性/系统体系结构相关+测试代码

    1. 设计优化 我们可以粗略地将性能优化分为两种类型:编码优化和设计优化.编码优化定义为不需要完整理解要解决的问题或者应用程序的执行流程就能实施的优化.通过定义看出,编码优化用于局部代码,同时该过程不 ...

最新文章

  1. mysql ldf文件太大_sqlserver 2008R2 数据库文件过大解决办法
  2. VOD, TVOD, SVOD FVOD的区别(转)
  3. 【c++】29.设计模式总结
  4. Matlab之Kalman:用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法
  5. 一个4体低位交叉的存储器_GD25Q16CSIG|NRAM存储器的原理及优势是什么?
  6. Spring Boot(十二)单元测试JUnit
  7. 对SQL server、Oracle、MySQL和PostgreSQL进行OLTP性能测试(Benchmark)
  8. Shell脚本监控专线Network并SendEmail报警
  9. Spring ActiveMQ教程
  10. 查询目标服务器系统,查看目标服务器的操作系统
  11. 《Visual Studio Code权威指南》读后总结
  12. java网络病毒,网络病毒是由因特网衍生出的新一代病毒,即Java及ActiveX病毒。由于(),因此不被人们察觉。...
  13. 网络服务——数据链路层--三层交换机接口模式-access和trunk命令详解
  14. 51单片机温控风扇仿真原理图 C语言程序,AT89C51单片机的电风扇控制系统设计+流程图+仿真图.doc...
  15. 03_美国医疗保健行业的数据介绍
  16. linux删除配置信息,linux 配置信息
  17. 大数乘法运算(C语言)
  18. 赛扬处理器_Intel低功耗奔腾/赛扬“变砖”:紧急退市、升级
  19. ADUM1201和川土微电子的CA-IS3722HS数字隔离器参数对比
  20. 电力系统宽频信号处理及实现

热门文章

  1. 系统架构师 项目经理 哪个更有前景_中央空调加地暖与五恒系统,哪个更省钱?...
  2. 在ubuntu 16.04里使用python—scrapy将爬取到的数据存到mysql数据库中的一些随笔
  3. Html5里frameSet不在使用的替代方法,使用ifram
  4. SSH整合注解版(Spring+Struts2+Hibernate)
  5. turtle库基础练习
  6. Swift - 操作SQLite数据库(引用SQLite3库)
  7. C#委托,事件理解入门 (译稿)
  8. 鸿蒙系统发布会是什么时候,鸿蒙系统2.0发布时间是什么时候?或将与EMUI11一同发布!...
  9. python基础一 day6 文件操作
  10. 第14、15教学周作业