
BenchmarkDotNet简单的基准测试
BenchmarkDotNet简单介绍
BenchmarkDotNet 可帮助您将方法转换为基准,跟踪其性能并共享可重复的测量实验。这不比编写单元测试难!在幕后,借助perfolizer统计引擎,它可以执行许多魔术操作,从而确保可靠,精确的结果。BenchmarkDotNet可保护您免受普遍的基准测试错误的影响,并在基准设计或获得的测量出现问题时警告您
Demo示例
创建控制台项目与安装BenchmarkDotNet
按照如下命令可安装到项目中
Install-Package BenchmarkDotNet
添加测试类与方法
我们通过在方法体上标记
Benchmark
特性来指定哪些方法需要进行测试
public class Md5VsSha256
{
private const int N = 10000;
private readonly byte[] data;
private readonly SHA256 sha256 = SHA256.Create();
private readonly MD5 md5 = MD5.Create();
public Md5VsSha256()
{
data = new byte[N];
new Random(42).NextBytes(data);
}
[Benchmark]
public byte[] Sha256() => sha256.ComputeHash(data);
[Benchmark]
public byte[] Md5() => md5.ComputeHash(data);
}
在
Main
方法中写入下列代码进行对Md5VsSha256
类下的方法基准测试
BenchmarkRunner.Run<Md5VsSha256>();
运行测试
请注意,您应该仅将Release
配置用于基准测试。否则,结果将与现实不符。如果您忘记更改配置,BenchmarkDotNet将打印警告。
然后我们通过Ctrl+B
进行生成。并通过Ctrl+F5
进行运行。
从中我们发现Md5所消耗的时间比Sha256所需要的时间要短一些,接着我们添加内存特性查看使用的内存情况
[MemoryDiagnoser]
[SimpleJob]
public class Md5VsSha256
{
private const int N = 10000;
private readonly byte[] data;
private readonly SHA256 sha256 = SHA256.Create();
private readonly MD5 md5 = MD5.Create();
public Md5VsSha256()
{
data = new byte[N];
new Random(42).NextBytes(data);
}
[Benchmark]
public byte[] Sha256() => sha256.ComputeHash(data);
[Benchmark]
public byte[] Md5() => md5.ComputeHash(data);
}
在Ctrl+B
生成后,通过Ctrl+F5
进行测试。
我们可以发现MD5比Sha256方法所占用的内存也要小一些。
Params参数
您可以通过属性在类中标记一个或多个字段或
[Params]
属性。在此属性中,您可以指定一组值。每个值都必须是一个编译时常量。您将获得每种参数值组合的结果。
[MemoryDiagnoser]
[SimpleJob]
public class Md5VsSha256
{
/// <summary>
/// 定义一个OneParams变量测试当它值为one和two时,Sha256方法与Md5方法的基准测试
/// </summary>
[Params("one","two")]
public string OneParams { get; set; }
private const int N = 10000;
private readonly byte[] data;
private readonly SHA256 sha256 = SHA256.Create();
private readonly MD5 md5 = MD5.Create();
public Md5VsSha256()
{
data = new byte[N];
new Random(42).NextBytes(data);
}
[Benchmark]
public byte[] Sha256() => sha256.ComputeHash(data);
[Benchmark]
public byte[] Md5() => md5.ComputeHash(data);
}
更多请参考官方文档
https://benchmarkdotnet.org/articles/overview.html
https://benchmarkdotnet.org/
其他
// 如果要导出不同格式的图表,请安装R语言并配置好环境变量,参考:https://blog.csdn.net/beauty0522/article/details/82560024
[AsciiDocExporter,CsvExporter,RPlotExporter,PlainExporter]
[MaxColumn,MinColumn,MemoryDiagnoser]
[SimpleJob]
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术
bk