C#性能测试BenchmarkDotnet
2023-06-13 09:15:42 时间
1.简介
在我们开发高性能代码时,需要各种针对性能优化进行编码。那么如何才能知道我们所加的代码是否有性能方面的正向优化呢?有了BenchmarkDotNet,做性能对比测试就非常容易了,只需要把你的测试方法加上特性[Benchmark], 想做不同.net平台的性能测试,比如传统的 .NET Framework, .NET Core,.NET 5 ~ 7,Mono,这些都没问题。
支持的运行时:.NET 5+、.NET Framework 4.6.1+、.NET Core 2.0+、Mono、NativeAOT支持的语言:C#、F#、Visual Basic支持的操作系统:Windows、Linux、macOS支持的体系结构:x86、x64、ARM、ARM64、Wasm 和 LoongArch64
2.详细内容
官方地址地址:https://benchmarkdotnet.org/
nuget安装:
测试代码编写:
编写测试代码时,需要注意在SimpleJob特性中需要指定框架版本。例如我这里使用的是.NET 6框架那么就要指定为RuntimeMoniker.Net60。
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using System.Security.Cryptography;
[SimpleJob(RuntimeMoniker.Net60)]
[RPlotExporter]
public class Md5VsSha256
{
private SHA256 sha256 = SHA256.Create();
private MD5 md5 = MD5.Create();
private byte[] data;
[Params(1000, 10000)]
public int N;
[GlobalSetup]
public void Setup()
{
data = new byte[N];
new Random(42).NextBytes(data);
}
[Benchmark]
public byte[] Sha256() => sha256.ComputeHash(data);
[Benchmark]
public byte[] Md5() => md5.ComputeHash(data);
}
代码调用:
using BenchmarkDotNet.Running;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Start" + DateTime.Now.ToString());
var summary = BenchmarkRunner.Run<Md5VsSha256>();
Console.WriteLine("END" + DateTime.Now.ToString());
}
}
}
运行效果:
在运行之前需要将应用程序编译为release版本,否则会出现异常。
BenchmarkDotNet 不仅仅是帮你运行benchmark方法,还帮你分析生成的结果:它会生成不同形式的报表,它的结果报表都是统计分析出来的。
相关文章
- transactionscope mysql_c# – 嵌套的TransactionScope在测试中失败
- c# mysql executenonquery_C#与数据库访问技术之ExecuteNonQuery方法
- C#设计模式——(结构型-代理设计模式)
- c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想
- C与MySQL结合实验如何成功构建测试系统(c#+mysql测试)
- c#递归访问文件夹(删掉歌词文件)
- 基于C#委托的深入分析
- 深入理解C#索引器(一种支持参数的属性)与属性的对比
- C#实现打印与打印预览功能的思路及代码
- c#的dataset离线数据集示例
- c#实现汉诺塔问题示例
- 基于C#实现的木马程序实例详解
- C#生成互不相同随机数的实现方法
- C#实现通过模板自动创建Word文档的方法