BenchmarkDotNet仅显示摘要部分

时间:2017-02-27 15:25:20

标签: c# benchmarking benchmarkdotnet

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

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

这是一个更清晰的屏幕截图;

enter image description here

2 个答案:

答案 0 :(得分:4)

为什么要跳过日志?基准测试可能需要很长时间,如果禁用日志,则会在黑屏上查看一段时间。如果出现问题,那么你就不会知道了。

但是,有一种解决方法。 BenchmarkDotNet使用特殊Configs进行自定义。 Loggers是这些配置的一部分。如果您未指定任何配置,则默认配置将使用它。您可以轻松扩展它,但是没有很好的API来禁用默认配置的一部分(希望很快就会添加;相应的API现在处于讨论阶段)。因此,您必须定义自己的配置,添加除记录器之外的默认配置的所有部分,并将其传递给BenchmarkRunner。然后不会使用ConsoleLogger。之后,您必须手动打印汇总表和结论。此外,标记格式的完整日志和摘要表将位于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());

答案 1 :(得分:1)

AndreyAkinshin回答者确实很棒,但其中一部分不再有效! ManualConfig 不再提供 .GetCompositeAnalyser(),因此您必须获取 ImmutableConfig ,这只能构成 BenchmarksCase

例如,如果您仅运行一个Benchmarkcase:可以使用... First()

这为我解决了

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