You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为BenchmarkDotNet导出的HTML/CSV文件名添加时间戳

在BenchmarkDotNet中为导出文件添加时间戳避免覆盖

要解决默认导出器覆盖历史结果的问题,你可以通过自定义导出器扩展默认的Html和Csv导出器,在生成文件名时自动添加时间戳。以下是具体实现步骤:

1. 自定义带时间戳的导出器

创建两个自定义导出器类,分别继承自默认的HtmlExporter和CsvExporter,重写GetFilename方法注入时间戳:

using BenchmarkDotNet.Exporters;
using BenchmarkDotNet.Reports;
using System;

public class TimestampedHtmlExporter : HtmlExporter
{
    public new static readonly TimestampedHtmlExporter Default = new();

    protected override string GetFilename(Summary summary)
    {
        var timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
        return $"Benchmark_{timestamp}.html";
    }
}

public class TimestampedCsvExporter : CsvExporter
{
    public new static readonly TimestampedCsvExporter Default = new();

    protected override string GetFilename(Summary summary)
    {
        var timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
        return $"Benchmark_{timestamp}.csv";
    }
}

2. 修改Benchmark配置

将原配置中的默认导出器替换为自定义的带时间戳导出器,其余配置保持不变:

AddColumnProvider(DefaultColumnProviders.Instance);
var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ",";
culture.NumberFormat.NumberGroupSeparator = "";

// 替换为自定义的带时间戳导出器
AddExporter(TimestampedHtmlExporter.Default);
AddExporter(TimestampedCsvExporter.Default);

WithSummaryStyle(
    new SummaryStyle(
        cultureInfo: culture,
        printUnitsInHeader: true,
        printUnitsInContent: false,
        timeUnit: Perfolizer.Horology.TimeUnit.Nanosecond,
        sizeUnit: null
    )
);

WithOptions(ConfigOptions.JoinSummary);

关键说明

  • 时间戳格式可按需调整,比如yyyy-MM-dd_HH-mm-ss,只需修改ToString方法中的格式字符串即可。
  • 自定义导出器完全继承默认导出器的所有功能,仅修改文件名生成逻辑,不会影响导出内容的格式与结构。
  • 若需更灵活的命名(如包含基准测试类名),可在GetFilename方法中利用summary对象的属性(如summary.Title)拼接文件名。

内容的提问来源于stack exchange,提问作者Wado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 01:32:30