仅显示 BenchmarkDotNet 的摘要部分

Show Only Summary Section of BenchmarkDotNet

我正在对一些 .net 框架进行基准测试,我正在使用 .net 框架、C# 和 BenchmarkDotNet

我想做的是;我正在写很多基准测试,我只对报告的摘要部分感兴趣。我如何配置 BenchmarkDotNet 以仅显示测试的摘要部分?

这里有截图更清楚;

为什么要跳过日志?基准测试可能会花费很多时间,如果您禁用日志,您将看到黑屏一段时间。万一出了问题,那你就不知道了。

但是,有一个解决方法。 BenchmarkDotNet 使用特殊的 Configs 进行定制。 Loggers 是这些配置的一部分。如果您未指定任何配置,则默认配置将使用它。您可以轻松扩展它,但是没有很好的 API 来禁用部分默认配置(希望很快会添加;相应的 API 目前正处于讨论阶段)。因此,您必须定义自己的配置,添加默认配置的所有部分(记录器除外)并将其传递给 BenchmarkRunner。那么 ConsoleLogger 将不会被使用。之后,您必须手动将摘要 table 和结论打印到控制台。此外,markdown 格式的完整日志和摘要 table 将位于 BenchmarkDotNet.Artifacts 文件夹中。

源代码:

var config = new ManualConfig();
config.Add(DefaultConfig.Instance.GetColumnProviders().ToArray());
config.Add(DefaultConfig.Instance.GetExporters().ToArray());
config.Add(DefaultConfig.Instance.GetDiagnosers().ToArray());
config.Add(DefaultConfig.Instance.GetAnalysers().ToArray());
config.Add(DefaultConfig.Instance.GetJobs().ToArray());
config.Add(DefaultConfig.Instance.GetValidators().ToArray());
config.UnionRule = ConfigUnionRule.AlwaysUseGlobal; // Overriding the default

var summary = BenchmarkRunner.Run<TestBench>(config);

var logger = ConsoleLogger.Default;
MarkdownExporter.Console.ExportToLog(summary, logger);
ConclusionHelper.Print(logger, config.GetCompositeAnalyser().Analyse(summary).ToList());

AndreyAkinshin 的回答真的很棒,但是有一部分不再有效了! ManualConfig 不再提供 .GetCompositeAnalyser(),因此您必须获取 ImmutableConfig 只有这样才能形成 BenchmarksCase

例如,如果您只有 运行 个基准案例:您可以使用 ...First()

这帮我修好了

ConclusionHelper.Print(logger, summary.BenchmarksCases.**First()**.Config.GetCompositeAnalyser().Analyse(summary).ToList());