使用 Benchmark.NET 测试代码性能

今天,我们将研究如何使用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

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python用reshape二维数组化为一维数组_Python reshape的用法及多个二维数组合并为三维数组的实例...

reshape(shape) : 不改变数组元素,返回一个shape形状的数组,原数组不变。是对每行元素进行处理resize(shape) : 与.reshape()功能一致,但修改原数组In [1]: a np.arange(20)#原数组不变In [2]: a.reshape([4,5])Out[2…

【直观理解】一文搞懂RNN(循环神经网络)基础篇

推荐阅读时间8min~15min 主要内容简介:神经网络基础、为什么需要RNN、RNN的具体结构、以及RNN应用和一些结论 1神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y&#x…

IIS 7.0 的 ASP.NET 应用程序生命周期概述

本主题介绍在 IIS 7.0 集成模式下运行以及与 .NET Framework 3.0 或更高版本一起运行的 ASP.NET 应用程序的应用程序生命周期。IIS 7.0 还支持经典模式,其行为类似于在 IIS 6.0 中运行的 ASP.NET。有关更多信息,请参见 IIS 5.0 和 6.0 的 ASP.NET 应用程…

python网络运维案例代码库_OLDboy-python第八期运维教程

课程目录:L01-Python8期VIP视频-Day101-开课介绍02-学生介绍03-课程内容介绍04-Python的发展05-Python特性介绍及与其它语言对比06-Python安装及环境准备07-编程风格要求08-Python的数据类型和运算符09-单行和多行注释10-理解ASSIC Unicode UTF-8编码11-使用和导入模…

给新手程序员的16个工作必备小妙招,省下时间去LOL吧!

写在前面: 这个文章核心并不是程序优化的具体技巧,而是拿到一个问题如何思考和利用工具的通用方法。比如即使我们不知道 profiler 这个东西,通过搜索"代码 每一行 时间"也可以很快知道有这样的工具叫做 profiler,并且学…

c#如何识别一张图片的格式

问题窥探在有些时候,我们拿到了一张图片。这张图片的格式是 JPG 还是 PNG?是 BMP 还是只有一帧的 GIF?虽然在大部分情况下,你确实可以把一张 PNG 格式的图片保存成 JPG,在电脑上也能双击打开看。但如果你要写一些程序来…

xftp怎么有root权限_许多人都不懂的Linux系统里的特殊权限!!你真的了解嘛?...

有的朋友一听Linux系统文件还有特殊权限,那头就要爆炸了,那还是接着看看/tmp目录和/usr/bin/passwd文件,怎么回事啊!!!看见没有啊!不是应该只有rwx 吗?还有其他的特殊权限( s 跟t )啊…

python中abc属于字符串吗_在Python中,字符串s = 'abc',那么执行表达式s+'d'之后,s的打印结果是( )。...

【单选题】当知道条件为真,想要程序无限执行直到人为停止的话,可以需要下列哪个选项?【单选题】Python3解释器执行 for i,v in enumerate([0,1,2],2):print(i,v)和 for i,v in enumerate([0,1,2]):print(i,v)的结果,你认为对的选项是( )。【单选题】Python3解释器执行AB2C3D.l…

菜单保卫战

前几天和老公去龙之梦,路过米爱粥,只见店员们齐刷刷站成两排,店长在前面训话。 只听店长非常严肃的说:“我们的菜单是很贵的,大家一定要注意。不光是迎宾的事情,也是你们每个人的事情。要经常注意一下&…

我是怎样爬下6万共享单车数据并进行分析的(附代码)

共享经济的浪潮席卷着各行各业,而出行行业是这股大潮中的主要分支。如今,在城市中随处可见共享单车的身影,给人们的生活出行带来了便利。相信大家总会遇到这样的窘境,在APP中能看到很多单车,但走到那里的时候&#xff…

使用 Tye 辅助开发 k8s 应用竟如此简单(三)

使用 Tye 辅助开发 k8s 应用竟如此简单(一)使用 Tye 辅助开发 k8s 应用竟如此简单(二)续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中如何对数据库进行链接。Newbe.Claptrap 是一个…

mybatis collection标签_一对多的关系,在MyBatis中如何映射?

# 使用collection标签需求:根据用户id查询用户信息的同时获取用户拥有的角色,一个用户可以拥有1个或多个角色。一般情况下,不建议直接修改数据库表对应的实体类。所以这里我们延用之前博客中新建的类SysUserExtend,并添加如下代码…

上传文件白名单_十大常见web漏洞——文件上传漏洞

漏洞介绍在我们浏览网页时,文件上传是非常常见的,比如我们会上传头像、附件、视频等文件,文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型…

Java编程比C编程好吗?《精通Unix下C语言与项目实践》读书笔记(15)

《精通Unix下C语言编程与项目实践》读书笔记(new)文章试读 不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国。一、二、三、四职场规划:一些杂七杂八的职场感悟吧。不值钱的软件人才 精力充沛与事业…

C# Lambda表达式详解,及Lambda表达式树的创建

每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦…

将span隐藏的函数_分类汇总函数Subtotal和Aggregate应用技巧解读

在实际的数据统计分析中,经常会遇到很多复杂的因素,例如,对隐藏的行或计算结果返回错误类型的值不予统计等等……如果此时还用常规的Sum系列、Count系列、Average系列等函数去做数据统计分析,将会是难上加难或者根本无法完成。此时…

粉丝回馈 | 用30天换来了这辈子独一无二的纪念

不知不觉2017年已经临近尾声了,超模君和小木决定趁年末,要给粉丝们一份用心的回馈,感谢这一年来大家对我们的支持与厚爱~ 经过几天几夜的苦思冥想、辗转反侧。。。超模君和小木最终确定了一份超模定制版纪念品,定制版!…

地图统计_连吃七八个都不够!太仓不完整包子统计地图来了!

在上班的路上总会顺道买上几个包子,不止是因为方便美味,圆鼓鼓的外型就像个太阳一样能带来满满的能量。这次叔打卡了8家高人气包子店,不知道有没有你经常光顾的那家呢?留言区还抽3位吃货送现金红包哦!长春路包子铺?地…

mysql 启动、重启、kill脚本

mysql 启动、重启、kill脚本 vi mysql#!/bin/sh mysql_port3306 mysql_username"root" mysql_password"" start_mysql() { printf "Starting MySQL...\n" /bin/sh /data1/mysql/bin/mysqld_safe --defa…