tnblog
首页
视频
资源
登录

BenchmarkDotNet简单的基准测试

6288人阅读 2021/5/10 14:18 总访问:3467222 评论:0 收藏:0 手机
分类: .net后台框架

.netcore

BenchmarkDotNet简单的基准测试

BenchmarkDotNet简单介绍

BenchmarkDotNet 可帮助您将方法转换为基准,跟踪其性能并共享可重复的测量实验。这不比编写单元测试难!在幕后,借助perfolizer统计引擎,它可以执行许多魔术操作,从而确保可靠,精确的结果。BenchmarkDotNet可保护您免受普遍的基准测试错误的影响,并在基准设计或获得的测量出现问题时警告您

Demo示例

创建控制台项目与安装BenchmarkDotNet

按照如下命令可安装到项目中

  1. Install-Package BenchmarkDotNet

添加测试类与方法

我们通过在方法体上标记Benchmark特性来指定哪些方法需要进行测试

  1. public class Md5VsSha256
  2. {
  3. private const int N = 10000;
  4. private readonly byte[] data;
  5. private readonly SHA256 sha256 = SHA256.Create();
  6. private readonly MD5 md5 = MD5.Create();
  7. public Md5VsSha256()
  8. {
  9. data = new byte[N];
  10. new Random(42).NextBytes(data);
  11. }
  12. [Benchmark]
  13. public byte[] Sha256() => sha256.ComputeHash(data);
  14. [Benchmark]
  15. public byte[] Md5() => md5.ComputeHash(data);
  16. }

Main方法中写入下列代码进行对Md5VsSha256类下的方法基准测试

  1. BenchmarkRunner.Run<Md5VsSha256>();

运行测试

请注意,您应该仅将Release配置用于基准测试。否则,结果将与现实不符。如果您忘记更改配置,BenchmarkDotNet将打印警告。

然后我们通过Ctrl+B进行生成。并通过Ctrl+F5进行运行。

从中我们发现Md5所消耗的时间比Sha256所需要的时间要短一些,接着我们添加内存特性查看使用的内存情况

  1. [MemoryDiagnoser]
  2. [SimpleJob]
  3. public class Md5VsSha256
  4. {
  5. private const int N = 10000;
  6. private readonly byte[] data;
  7. private readonly SHA256 sha256 = SHA256.Create();
  8. private readonly MD5 md5 = MD5.Create();
  9. public Md5VsSha256()
  10. {
  11. data = new byte[N];
  12. new Random(42).NextBytes(data);
  13. }
  14. [Benchmark]
  15. public byte[] Sha256() => sha256.ComputeHash(data);
  16. [Benchmark]
  17. public byte[] Md5() => md5.ComputeHash(data);
  18. }

Ctrl+B生成后,通过Ctrl+F5进行测试。

我们可以发现MD5比Sha256方法所占用的内存也要小一些。

Params参数

您可以通过属性在类中标记一个或多个字段或[Params]属性。在此属性中,您可以指定一组值。每个值都必须是一个编译时常量。您将获得每种参数值组合的结果。

  1. [MemoryDiagnoser]
  2. [SimpleJob]
  3. public class Md5VsSha256
  4. {
  5. /// <summary>
  6. /// 定义一个OneParams变量测试当它值为one和two时,Sha256方法与Md5方法的基准测试
  7. /// </summary>
  8. [Params("one","two")]
  9. public string OneParams { get; set; }
  10. private const int N = 10000;
  11. private readonly byte[] data;
  12. private readonly SHA256 sha256 = SHA256.Create();
  13. private readonly MD5 md5 = MD5.Create();
  14. public Md5VsSha256()
  15. {
  16. data = new byte[N];
  17. new Random(42).NextBytes(data);
  18. }
  19. [Benchmark]
  20. public byte[] Sha256() => sha256.ComputeHash(data);
  21. [Benchmark]
  22. public byte[] Md5() => md5.ComputeHash(data);
  23. }

更多请参考官方文档

https://benchmarkdotnet.org/articles/overview.html
https://benchmarkdotnet.org/

其他

  1. // 如果要导出不同格式的图表,请安装R语言并配置好环境变量,参考:https://blog.csdn.net/beauty0522/article/details/82560024
  2. [AsciiDocExporter,CsvExporter,RPlotExporter,PlainExporter]
  3. [MaxColumn,MinColumn,MemoryDiagnoser]
  4. [SimpleJob]

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

bk

2021/2/2 18:26:49

[good][good]

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request[&quot;imgBase&quot;]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///&lt;summary&gt; ///转全角的函数(SBCcase) ///&lt;/summary&gt; ///&lt;paramname=&quot;input&quot;&gt;任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

C.net 配合小程序实现经过第三方服务器中转文件

某些时候,微信小程序前段上传文件的时候需要经过第三方服务器再将文件上传到客户的服务器;操作如下:1:(小程序内向中端服...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术