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

如何让Benchmark.NET MemoryDiagnoser输出内存诊断数据?

问题解决:Benchmark.NET 内存诊断器无输出的修复方案

你的核心问题是手动配置列时未包含内存诊断器对应的统计列——即便添加了MemoryDiagnoser,如果没指定要显示内存相关数据列,控制台输出自然不会展示内存分配、GC代等信息。以下是两种直接有效的修复方式:

方案一:在ManualConfig中显式添加内存列

既然你自定义了列集合,需要手动把内存诊断器的列加入配置:

public static void RunBenchmarks()
{
    var config = new ManualConfig()
        .AddDiagnoser(new MemoryDiagnoser(new MemoryDiagnoserConfig(true)))
        .AddLogger(ConsoleLogger.Default)
        .AddColumn(
            TargetMethodColumn.Method, 
            StatisticColumn.Median, 
            StatisticColumn.StdDev,
            StatisticColumn.Q1, 
            StatisticColumn.Q3, 
            new ParamColumn("Size"),
            // 新增内存相关统计列
            MemoryDiagnoser.Columns.Allocated, // 单次操作分配内存
            MemoryDiagnoser.Columns.GcGen0,    // Gen0 GC次数
            MemoryDiagnoser.Columns.GcGen1,    // Gen1 GC次数
            MemoryDiagnoser.Columns.GcGen2,    // Gen2 GC次数
            MemoryDiagnoser.Columns.AllocRatio // 分配率
        );
    BenchmarkRunner.Run<SerialiserBenchmarks>(config);
}

方案二:基于默认配置扩展(更简洁)

如果你不想手动维护所有列,可以基于Benchmark.NET的默认配置扩展,保留特性的自动生效逻辑:

public static void RunBenchmarks()
{
    var config = ManualConfig.Create(DefaultConfig.Instance)
        .AddLogger(ConsoleLogger.Default)
        // 只添加你额外需要的列(默认配置已包含内存列)
        .AddColumn(StatisticColumn.Q1, StatisticColumn.Q3);
    BenchmarkRunner.Run<SerialiserBenchmarks>(config);
}

此时类上的[MemoryDiagnoser]特性会自动生效,无需在配置中重复添加诊断器。

额外注意事项

  • [ShortRunJob]会减少迭代次数,可能导致内存统计数据不稳定,如需精准内存分析,建议改用[MediumRunJob]或默认Job。
  • 若同时在类特性和配置中添加MemoryDiagnoser,Benchmark.NET会自动去重,不会引发冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:27:12