每次运行iter
之外的设置代码时,内置基准测试工具的当前实现似乎会多次在iter
调用内运行代码。当基准测试的代码修改设置数据时,基准代码的后续迭代不再是对同一事物进行基准测试。
作为一个具体的例子,我正在评估从Vec
移除值所需的速度:
#![feature(test)]
extern crate test;
use test::Bencher;
#[bench]
fn clearing_a_vector(b: &mut Bencher) {
let mut things = vec![1];
b.iter(|| {
assert!(!things.is_empty());
things.clear();
});
}
这将失败:
test clearing_a_vector ... thread 'main' panicked at 'assertion failed: !things.is_empty()', src/lib.rs:11
对向量执行push
元素的类似基准测试表明,iter
闭包执行了近9.8亿次(取决于闭包的速度)。结果可能非常误导,如果单次运行符合我的预期,就会有数百万次运行。
使用Rust nightly 1.19.0(f89d8d184 2017-05-30)进行测试
答案 0 :(得分:0)
查看pew,这是最近发布的用于对防锈代码进行基准测试的箱子。它允许您进行一次克隆到每个基准测试的设置,或通过暂停/恢复基准来手动运行设置。
这个库处于非常早期阶段,但它可能正是您正在寻找的。欢迎捐款。