BenchmarkDotNet(NuGet获取),对每个benchmark方法生成独立的工程,自动选择迭代次数,热身,过载开销预估等。
为减少编译环境的影响,需要生成Release版本,并在cmd中运行。Debug模式,会慢10~100倍。
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Running;
using System;
static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<Md5VsSha256>();
Console.WriteLine(DateTime.Now.ToString() + "END");
Console.WriteLine("按任意键退出......");
Console.ReadKey();
}
如果需要Debug模式进行调试,可以进行设置:
static void Main(string[] args)
{
// debug
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args,
new DebugInProcessConfig());
Console.ReadKey();
}
需要测试的方法,用 BenchmarkAttribute 标记。
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Engines;
using BenchmarkDotNet.Jobs;
using System;
using System.Security.Cryptography;
//[SimpleJob(RunStrategy.Throughput)]
[SimpleJob(RuntimeMoniker.Net47, baseline:true)]
//[SimpleJob(RuntimeMoniker.NetCoreApp30)]
[MinColumn, MaxColumn, MeanColumn, MedianColumn]
[RPlotExporter]
[MemoryDiagnoser]
//[ThreadingDiagnoser] // .NET Core 3.0
public class Md5VsSha256
{
private readonly SHA256 _sha256 = SHA256.Create();
private readonly MD5 _md5 = MD5.Create();
private byte[] _data;
// 1. 参数初始化,2个值或多个
[Params(1000, 10000)]
public int Num;
// 2. 每个Num执行一次
[GlobalSetup]
public void Setup()
{
_data = new byte[Num];
new Random(42).NextBytes(_data);
}
// 3. 测试方法
[Benchmark]
public byte[] Sha256()
{
return _sha256.ComputeHash(_data);
}
// 3.
[Benchmark]
public byte[] Md5()
{
return _md5.ComputeHash(_data);
}
// 4. 所有的测试方法执行后,每个方法执行一次
public void GlobalCleanup()
{
//
}
//[Benchmark]
//[Arguments(100, 10)]
public void Benchmark(int a, int b)
{
}
}
标签:Console,基准,BenchMark,BenchmarkDotNet,void,测试,using,data,public
From: https://www.cnblogs.com/wesson2019-blog/p/16931566.html