仅显示 BenchmarkDotNet 的摘要部分

Los*_*ary 7 c# benchmarking benchmarkdotnet

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

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

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

在此处输入图片说明

And*_*hin 5

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

不过,有一个解决方法。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());
Run Code Online (Sandbox Code Playgroud)

  • 您好@AndreyAkinshin,感谢您的回答,并感谢您出色的基准测试工具。我想跳过详细日志,因为控制台应用程序窗口的文本大小有限。因此,如果开发人员编写了大量基准测试,他/她应该离开 vs 并查看导出的摘要文件。我不想这样做,而我只对快速总结结果感兴趣。因为我不断地更改代码。否则,详细的日志就很棒了。也许这样的功能会有帮助;也许是一个属性;“[DetailLevel.SummaryOnly]”或“[DetailLevel.SummaryAndSpec]”或“[DetailLevel.Full]” (2认同)