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方法,還幫你分析生成的結果:它會生成不同形式的報表,它的結果報表都是統計分析出來的。