直接上代码 !换上之后终端更显丝滑。
// 测试场景:100万行数据,每批新增100行
// Vec方式(差)
let mut vec_history = Vec::with_capacity(1_000_000);
let start = Instant::now();
for _ in 0..10000 {
for _ in 0..100 { vec_history.push(line.clone()); }
if vec_history.len() > 1_000_000 {
let drop = vec_history.len() - 1_000_000;
vec_history.drain(0..drop); // ← 性能瓶颈
}
}
println!("Vec: {:?}", start.elapsed()); // 可能几秒钟
// VecDeque方式(好)
let mut deque_history = VecDeque::with_capacity(1_000_000);
let start = Instant::now();
for _ in 0..10000 {
for _ in 0..100 { deque_history.push_back(line.clone()); }
while deque_history.len() > 1_000_000 {
deque_history.pop_front(); // ← 高效O(1)
}
}
println!("VecDeque: {:?}", start.elapsed()); // 毫秒级
直接上代码 !换上之后终端更显丝滑。
// 测试场景:100万行数据,每批新增100行
// Vec方式(差)
let mut vec_history = Vec::with_capacity(1_000_000);
let start = Instant::now();
for _ in 0..10000 {
for _ in 0..100 { vec_history.push(line.clone()); }
if vec_history.len() > 1_000_000 {
let drop = vec_history.len() - 1_000_000;
vec_history.drain(0..drop); // ← 性能瓶颈
}
}
println!("Vec: {:?}", start.elapsed()); // 可能几秒钟
// VecDeque方式(好)
let mut deque_history = VecDeque::with_capacity(1_000_000);
let start = Instant::now();
for _ in 0..10000 {
for _ in 0..100 { deque_history.push_back(line.clone()); }
while deque_history.len() > 1_000_000 {
deque_history.pop_front(); // ← 高效O(1)
}
}
println!("VecDeque: {:?}", start.elapsed()); // 毫秒级