每次运行 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) 运行
最佳答案
查看 pew ,最近发布的用于对 Rust 代码进行基准测试的箱子。它允许您执行克隆到每个基准测试中的一次性设置,或者通过暂停/恢复基准测试手动运行设置。
该库处于非常早期的阶段,但它可能正是您要找的。我们随时欢迎您的贡献。
关于rust - 我如何对改变设置数据的代码进行基准测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44344832/