rust - 我如何对改变设置数据的代码进行基准测试?

标签 rust benchmarking

每次运行 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/

相关文章:

rust - Treasury Module 的 set_pot 函数是否可供公众使用?

rust - 是否有相当于python中的 `any`方法

javascript - 为什么Javascript的每个方法都被压倒了?

benchmarking - Zipfian vs Uniform - 这两个 YCSB 分布有什么区别?

operator-overloading - E0369 连接字符串引用时

rust - 为什么 random() 结果没有推断出类型?

codeigniter - PHP 函数curl_exec() 减慢了我的脚本速度

php - 有没有办法测量 PHP 中的解析时间?

Php CPU 周期基准测试

rust - 我必须怎么做才能解决 "use of moved value"错误?