用途:面向 .NET 8.0+ 的微基准测试指导,使用 BenchmarkDotNet v0.14+,示例采用当前稳定 API。适用场景为对比不同实现(如字符串拼接、序列化方式、循环与 LINQ)的耗时、GC 分配量,并验证 JIT 优化是否生效。
主要能力:在独立基准项目中引用 BenchmarkDotNet(可使用 benchmarks/ 目录),用 [Benchmark] 标注方法,[Benchmark(Baseline = true)] 标记基线以输出 Ratio 列(低于 1.00 表示快于基线);[MemoryDiagnoser] 输出 Allocated、Gen0/1/2 列,Allocated 为零可确认零分配;[DisassemblyDiagnoser(maxDepth: 2)] 可查看 JIT 编译产物以验证去虚拟化、内联;[Params] 做参数化基准;[BenchmarkCategory] 配合 GroupBenchmarksBy 分组,运行时用 --filter Serialization 过滤;导出器 JsonExporterAttribute.Full、HtmlExporter、MarkdownExporter 生成 JSON、HTML、Markdown 报告,便于 CI 产物上传与回归比较;可自定义 ManualConfig(如 Job.ShortRun、WithArtifactsPath)加速 CI。
使用方式:Program.cs 中调用 BenchmarkRunner.Run<StringConcatBenchmarks>(),或以 BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args) 运行全部;命令行执行 dotnet run -c Release(必须 Release,Debug 下 JIT 优化关闭、结果无意义),可用 --list flat 列出基准、--job Dry 做干跑校验。初始化用 [GlobalSetup]/[GlobalCleanup],基准会改变共享状态时用 [IterationSetup]。
限制与注意事项:不要在测试项目(xUnit/NUnit)中跑基准,测量框架会受干扰,应使用独立控制台项目;基准方法需返回或消费结果以避免死代码消除;不要手动 Thread.Sleep/Task.Delay 或添加预热,BenchmarkDotNet 自行管理预热与迭代;初始化用 [GlobalSetup] 而非构造函数,因为实例会被多次创建;避免共享可变状态与 setup 中的分配导致指标失真;Native AOT 场景无 JIT,不可用反汇编诊断器,只能看耗时与内存。性能模式(Span<T>、ArrayPool<T>、sealed 去虚拟化)、C# 现代语法、编码规范、AOT、序列化、性能剖析与 CI 回归检测等主题由该技能体系的其他技能覆盖;资料未提供具体价格、收费或许可信息。