Avatar ·

如何正确测量 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 毫秒,而且顺序有时会变化。我知道这是由于后台进程、缓存等原因,但如何获得稳定的数字呢?