7

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

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

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

在此处输入图像描述

4

2 回答 2

4

为什么要跳过日志?基准测试可能需要很长时间,如果您禁用日志,您会看到黑屏一段时间。如果出现问题,那么您将不会知道它。

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

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

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

这为我修好了

ConclusionHelper.Print(logger, summary.BenchmarksCases.**First()**.Config.GetCompositeAnalyser().Analyse(summary).ToList());
于 2019-12-20T09:27:18.117 回答