1 个不稳定版本

0.1.0 2022年10月9日

#248 in 性能分析

Apache-2.0 OR MIT

7KB

微基准宏

测量给定次数迭代的平均时间。易于使用,无依赖。

Cargo.toml

[dependencies]
mbench = "0.1"

main.rs

#[macro_use]
extern crate mbench;

fn my_func(x: u32) { vec![x; u16::MAX as usize].sort(); }

fn main() {
    let mut text = String::new();
    microbench!(
        text = "Hello world!".to_string();
        my_func(42);
        // ... code ....
    );
    println!("{text}");
}

输出

Elapsed / 10 = 3.70ms
Hello world!

默认迭代次数为10次,但你可以设置任意次数 microbench!(4, {/* code */});

microbench!(1, {
    text = "Hello world!".to_string();
    my_func(42);
});
Elapsed / 1 = 3.34ms
Hello world

此外,还有设置迭代次数的简化语法(1,5,10,50,100,500,1000)

microbench1!(/* code */);
microbench5!(/* code */);
microbench10!(/* code */);
microbench50!(/* code */);
microbench100!(/* code */);
microbench500!(/* code */);
microbench1000!(/* code */);

使用宏 fixedbench!([0..=2], 10, {/* code */}); 你可以设置毫秒范围内的值(本例中为10次迭代)。如果代码运行时间超过或低于指定间隔,则会发生panic。

这可以用于测试。如果代码在更改后变慢,则测试失败。默认迭代次数为1次。

#[macro_use]
extern crate mbench;

fn my_func(ms: u64) {
    let ms = std::time::Duration::from_millis(ms);
    std::thread::sleep(ms);
}

#[cfg(test)]
mod tests {
    use super::my_func;

    #[test]
    fn simple() {
        fixedbench!([..=2], {
            my_func(3);
        });
    }
}
running 1 test
test tests::simple ... FAILED

failures:

---- tests::simple stdout ----
Elapsed / 1 = 3.36ms
thread 'tests::simple' panicked at 'expected [..=2]ms, finished in 3ms.', main.rs:15:9

请注意,代码的运行时间可能因不同机器而异。完成一段代码的工作后,应该删除或注释掉此类测试。

无运行时依赖