BenchmarkDotNet-.Net性能测试库
BenchmarkDotNet 是一个强大的. NET 库, 可用于性能测试,Benchmark 可以精准简单的测试应用程序性能,它为每个测试方法生成一个独立的项目, 执行此项目的多个启动, 并运行测试方法,以保证测试的精准性。
时间可以精确到微秒(us)、纳秒(ns),还可以测试内存使用情况
要想测试一个函数的性能只需要在函数上标记 BenchmarkAttribute 特性即可,并生成不同的格式的性能报告,它会计算许多统计数据, 允许您运行统计测试, 并比较不同测试方法的结果,它试图帮助您进行质量性能调查。
首先通过 NuGet 包管理器将库安装到项目中:
Install-Package BenchmarkDotNet
要测试的类:(在方法上加[Benchmark]特性)
public class TestContext { [Benchmark] public void Build1() { var sqlBuilder = new SqlBuilder(typeof(Person)); //生成查询SQL #region 复杂条件查询#SELECT `ID`,`Name` FROM `Person` WHERE ((`ID`=1 AND (`Age`=13 OR `Name`=1 OR `name` LIKE 'fan%'))) LIMIT 10 var filter = new AndFieldFilter(new EqualFieldFilter<int>("ID", 1), new OrFieldFilter(new EqualFieldFilter<int>("Age", 13), new EqualFieldFilter<int>("Name", 1), new LikeFieldFilter("name", "fan", LikeMode.Start))); for (int i = 0; i < 100; i++) { var sql = sqlBuilder .SetTableName(nameof(Person)) .SetAndWhere(filter) .BuildSelectSql(); } #endregion } [Benchmark] public void Build2() { var builder = new ExpressionWhereBuilder('`'); for (int i = 0; i < 100; i++) { string sql = builder.ToSql<Person>(p => p.ID == 1 && p.Name.Contains("fan") && p.Age == 13).Sql; } } }
控制台调用,即可输出性能测试图标
var summary = BenchmarkRunner.Run<TestContext>(); Console.ReadKey();
测试内存使用情况,只需要在测试类上加特性 [MemoryDiagnoser]
参考:
https://www.xcode.me/post/5777