如何使用 BenchmarkDotNet 对日志基础设施进行基准测试?

How to benchmark logging infrastructure with BenchmarkDotNet?

我们有一个内部框架来处理我们的日志记录、数据访问、加密……应有尽有。我想开始比较性能,比如将日志记录功能与其他主流系统(即 nlog、log4net、serilog)进行比较。显然,我将从所有系统都具有的功能开始,例如记录到文件或控制台。

BenchmarkDotNet适用于这种情况吗?我读过的大多数示例和论文都指出了非常紧凑的循环中的使用场景,并且主要使用 IO,例如内存和 CPU,而不是磁盘。

作为练习,我编写了一个 xunit 测试以使用基线功能对控制台写入进行基准测试,但测试从未完成,我最终终止了进程,导致我在 SO 上进行了 Post。

如果我使用 BenchmarkDotNet 的方式不对,是否还有另一个测试套件更符合我想要完成的目标?

谢谢, 斯蒂芬

BenchmarkDotNet 最适合 CPU 绑定代码的微基准测试。影响 IO 绑定代码的因素太多,我不认为微基准测试是一种很好的方法。

相反,如果可能的话,我建议您将每个框架集成到您的应用程序中,并在尽可能真实的条件下测量性能...包括 "catastrophic failure" 条件或可能需要记录日志的条件一个拳击。还可以使用不执行任何操作(并且尽可能早不执行任何操作)的 "null logger" 进行测试,以便您可以确定一种基线。

这只会告诉您这些日志记录框架如何针对您的特定应用程序运行 - 但我建议,这是您了解的最重要的事情。