用途:为 .NET 项目提供使用 BenchmarkDotNet v0.14+(.NET 8.0+ 基线)编写与运行微基准测试的指导,覆盖基准类设置、内存与反汇编诊断器、CI 产物导出、基线对比和结果分析,以及会令测量失效的常见陷阱。
主要能力:基准类与配置;MemoryDiagnoser 跟踪每次调用的 GC 分配与回收次数(Allocated、Gen0/1/2 列);DisassemblyDiagnoser 检查 JIT 编译产物以验证去虚拟化、内联等优化;导出器(JsonExporterAttribute.Full、HtmlExporter、MarkdownExporter)用于 CI 产物收集;通过 Baseline = true 设置基线并用 Ratio 列比较;用 [Params] 与 [BenchmarkCategory] 做参数化与分类基准。
使用方式:基准项目与生产代码分离,放在解决方案根目录的 benchmarks/ 下,引用 BenchmarkDotNet 0.14.*;用 BenchmarkRunner.Run<T>() 或 BenchmarkSwitcher.FromAssembly(...).Run(args) 运行;必须以 Release 模式运行:dotnet run -c Release;可用 --filter、--list flat、--job Dry 过滤或试运行;CI 中可用 ManualConfig 配合 Job.ShortRun 与 JsonExporter.Full,并通过 actions/upload-artifact 上传 BenchmarkDotNet.Artifacts/results/。
适用场景:比较字符串拼接、集合遍历、序列化格式等实现性能;验证零分配代码路径;在 CI 中收集机器可读结果用于回归对比。
限制:不涵盖性能架构模式、性能分析工具(dotnet-counters、dotnet-trace、dotnet-dump)、CI 基准回归检测、Native AOT、序列化格式性能、架构模式、GC 调优等,这些由其他技能处理。AOT 场景无 JIT,不能使用 DisassemblyDiagnoser。常见陷阱包括 Debug 模式运行、死代码消除、共享可变状态、冷启动测量、setup 中分配、环境噪声;应返回值防止消除,用 [GlobalSetup] 而非构造函数初始化,不要手动加 Thread.Sleep 或 Task.Delay,也不要在测试项目中运行基准。具体收费、平台与效果资料暂未提供。