【发布时间】:2020-03-21 12:01:02
【问题描述】:
我正在解析一些文本。我需要支持 unicode 文本,这就是我使用 String::chars 迭代器的原因:
use std::time::Instant;
fn main() {
let text = "a".repeat(10000);
let mut timer1 = 0;
let mut timer2 = 0;
let start1 = Instant::now();
for pos in 1..10000 {
let start2 = Instant::now();
let ch = text.chars().nth(pos).unwrap();
timer2 += start2.elapsed().as_millis();
}
timer1 += start1.elapsed().as_millis();
println!("timer1: {} timer2: {}", timer1, timer2);
}
示例输出:
timer1: 4276 timer2: 133
为什么timer2 比timer1 少得令人难以置信,而我认为它们应该彼此非常接近?
附:我已经知道.nth 很慢,不应该使用。
【问题讨论】:
-
每次循环迭代都将在不到一毫秒的时间内运行(在执行
.chars().enumerate()时)。as_millis返回一个整数,因此任何小于一毫秒的都被舍入为 0。尝试改用as_nanos... -
@kazemakase 天哪。你是对的。我有很多其他事情要考虑,所以我看不出这个简单的原因......谢谢!
标签: performance rust