**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。
这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我在Rust和Python中编写了使用dict和hashmap执行相同计算的脚本。不知何故,Python版本的速度要快10倍以上。这是如何发生的?
rust 脚本:`
use std::collections::HashMap;
use std::time::Instant;
fn main() {
let now = Instant::now();
let mut h = HashMap::new();
for i in 0..1000000 {
h.insert(i, i);
}
let elapsed = now.elapsed();
println!("Elapsed: {:.2?}", elapsed);
}
输出:Elapsed: 828.73ms
Python脚本:
import time
start = time.time()
d = dict()
for i in range(1000000):
d[i] = i
print(f"Elapsed: {(time.time() - start) * 1000:.2f}ms")
输出:Elapsed: 64.93ms
对于字符串键也是如此。我搜索了关于HashMap的不同散列器的不同解决方案,但没有一个能提供超过10倍的速度提升
1条答案
按热度按时间gajydyqb1#
Rust在默认情况下没有启用优化,因为它在调试时很烦人,这使得它在调试模式下比Python慢,启用优化应该可以解决这个问题。
这种行为并不是Rust特有的,它是大多数编译器的默认行为(如用于C/C++的
gcc/g++
或clang
,两者都需要-O3
标志以获得最大性能)。您可以通过将
--release
标志添加到相应的cargo
命令来启用Rust中的优化,例如:Python并不区分有没有优化,因为Python是一种解释语言,没有(显式的)编译步骤。
下面是您的代码在我的计算机上的行为:
--release
):约160毫秒Python的
dict
实现很可能是用C编写的,并且经过了大量优化,因此它在性能上应该与Rust的HashMap
类似,这正是我在我的机器上看到的。