如何基准突变设置数据的代码



内置基准测试工具的当前实现似乎每次运行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。它允许您进行一次克隆到每个基准测试中的时间,或者通过暂停/恢复基准测试。

这个库处于很早的阶段,但这可能是您想要的。总是欢迎捐款。

相关内容

  • 没有找到相关文章

最新更新