性能测试是一个常见的功能需求,但估计很多 .NET 开发者还在使用 DateTime.Now 测试代码性能。偶尔对小段代码进行测试,这样的方法也不错。但若是测试规模比较大,需要的诊断信息更丰富,那这样简单甚至可以说简陋的方法肯定是行不通了。最好是使用专业的性能测试工具。
基本介绍
Benchmarkdotnet 是由 dotnet 官方提供的一款专门面向 .NET 平台的性能测试库,可以帮助开发者直接将任何方法转换为基准测试,跟踪分析其性能,产生可靠、准确的测试结果,并共享可重复的测量试验。 如果你熟悉单元测试,你会发现使用 BenchmarkDotNet 进行基准测试和写单元测试非常像,非常简单直观易上手。更秒的是,BenchmarkDotNet 遵循了一些性能测试的最佳实践,能够提醒纠正一些常见的错误用法。
简单示例
只需要在需要测试的方法上加上 [Benchmark] 特性,就可以将其转化为一个基准测试。以下是官方给出的简单示例:
using System; using System.Security.Cryptography; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Running; [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); } public class Program { public static void Main(string[] args) { BenchmarkRunner.Run<Md5VsSha256>(); } }
结果分析
运行上述代码后,会输出以下结果。
可以看出,结果中简单列明了 BenchmarkDotNet 的版本,操作系统版本,CPU 类型和 .NET SDK信息。
在测试及结果表格中,显示了运行册数、消耗时间的均值、标准差和99.9%置信区间的标准误。
另外,在项目的 bin/Release/(BenchmarkDotNet 需要运行在Release模式下)还生成了测试结果的 markdown 和 excel 文件。
当然,上述结果只是默认标准结果,你还可以通过配置显示更多项目,比时间消耗的中位数、秩等项目。
同时,也可以在测试类上加上 [RPlotExporter] 特性,可以在 bin 目录下输出 R 语言的绘图代码。
总之, BenchmarkDotNet 非常简单易用:你无需成为一个专家即可写出高质量的基准测试来。
目前已经有超过 11700 款项目使用 BenchmarkDotNet 。包括微软官方项目 ASP.NET Core、ML.NET 、Entity Framework Core, F#等, 还有大量第三方项目如 Newtonsoft.Json, Elasticsearch.Net, Dapper, Autofac, LiteDB, GraphQL for .NET, .NET Docs,,TensorFlow.NET, Apache Thrift等。
如果有性能测试的需要,强烈推荐使用!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。