如何正确测量 Rust 代码性能:基准测试和性能分析
大家好,同事们!我写 Rust 大约半年了,遇到了一个问题:无法正常测量代码的执行时间。我尝试使用 std::time::Instant,但结果每次运行都会波动,尤其是对于小函数。例如,我想比较两种向量求和的方法:
```rust
use std::time::Instant;
fn sum_for(v: &[i32]) -> i32 {
let mut sum = 0;
for x in v { sum += x; }
sum
}
fn sum_iter(v: &[i32]) -> i32 {
v.iter().sum()
}
fn main() {
let data = vec![1; 1_000_000];
let start = Instant::now();
let _ = sum_for(&data);
println!("for: {:?}", start.elapsed());
let start = Instant::now();
let _ = sum_iter(&data);
println!("iter: {:?}", start.elapsed());
}
```
在我的笔记本上(Ryzen 5, Linux),第一次测量显示 0.5-1.2 毫秒,第二次显示 0.3-0.9 毫秒,而且顺序有时会变化。我知道这是由于后台进程、缓存等原因,但如何获得稳定的数字呢?