Rust中使用#[bench]报错,正确的基准测试方式是什么?
报错原因说明
#[bench] 属于Rust的不稳定测试特性,仅支持在nightly版本的Rust工具链上运行,你使用的是stable稳定版工具链,所以会触发特征不支持的编译报错。官方文档中关于cargo bench的#[bench]示例是默认面向nightly工具链场景编写的,未明确标注工具链要求才会导致你直接粘贴代码运行失败。
稳定版Rust正确基准测试方案
当前稳定版Rust生态的标准基准测试方案是使用官方维护的criterion库,这是目前唯一被广泛推荐、不会过时的基准测试方案,使用步骤如下:
- 在项目
Cargo.toml中添加依赖配置:
[dev-dependencies] criterion = { version = "0.5", features = ["html_reports"] } [[bench]] name = "my_benchmark" harness = false
- 在项目
benches/目录下创建my_benchmark.rs文件,编写基准测试代码,示例如下:
use criterion::{criterion_group, criterion_main, Criterion}; fn test_func(c: &mut Criterion) { c.bench_function("测试vec插入性能", |b| b.iter(|| { let mut vec = Vec::new(); for i in 0..1000 { vec.push(i); } vec })); } criterion_group!(benches, test_func); criterion_main!(benches);
- 运行命令
cargo bench即可得到统计完善的基准测试结果,还会自动生成可视化的HTML报告。
cargo bench的构建版本规则
- 默认情况下,
cargo bench会使用release优化版本执行测试,默认开启最高等级优化(opt-level=3),完全匹配生产环境的构建配置,确保测试结果具备参考价值。 - 如需指定其他构建版本,可以通过
--profile参数实现:- 测试debug版本性能:
cargo bench --profile dev - 测试自定义配置版本:可先在
Cargo.toml中自定义对应profile的优化规则,再通过--profile 自定义profile名运行测试即可。
- 测试debug版本性能:
关于#[bench]的状态说明
#[bench]并未被废弃,只是Rust核心团队一直没有将其纳入稳定特性的计划,所以长期仅能在nightly工具链使用,普通开发者没有特殊需求不需要适配该特性,使用稳定版兼容的criterion方案即可。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

