c# - 仅显示 BenchmarkDotNet 的摘要部分

标签 c# benchmarking benchmarkdotnet

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

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

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

enter image description here

最佳答案

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

但是,有一个解决方法。 BenchmarkDotNet使用特殊Configs用于定制。 记录器是这些配置的一部分。如果您不指定任何配置,则将使用默认配置。您可以轻松扩展它,但没有很好的 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());

关于c# - 仅显示 BenchmarkDotNet 的摘要部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42489457/

相关文章:

MATLAB 函数第一次很慢,但随后会快得多。为什么?

c# - C# for 循环和 Array.Fill 之间的性能差异

c# - 为什么 Mono 运行简单方法的速度较慢,而 RyuJIT 运行速度明显更快?

c# - 为什么我不能使用 Humanizer 库中的 TextInfo.ToTitleCase 方法?

c# - RSA SHA256 签名生成和验证

javascript - 为什么在调用服务器端验证之前 HttpPostedFileBase 会在大文件上出错?

malloc - 如何对 malloc 实现进行基准测试?

java - 在java中将整数转换为字符串的最快方法

c# - 在 ASP.net MVC 中使用 benchmarkdotnet 获取性能结果

c# - 定义自己的关键字和含义