首页 > 解决方案 > 与 Python 代码相比,我如何提高 Rust 代码的性能?

问题描述

我如何提高我的 Rust 代码的性能,因为 Python 大约需要 5 秒才能完成,而 Rust 需要 7 秒。

我在用build --release

锈代码

fn main() {
    let mut n = 0;

    loop {
        n += 1;
        println!("The value of n is {}", &n);
        if n == 100000 {
            break;
        }
    }
}

Python3 代码

n = 0
while True:
   n+=1
   print("The value of n is ",n)
   if n == 100000:
       break

标签: pythonpython-3.xperformancerust

解决方案


如果我没记错的话,println锁定标准输出。取自Rust 性能陷阱

[...] 默认宏将为每个写入操作print!锁定 STDOUT 。因此,如果您有较大的文本输出(或来自 STDIN 的输入),您应该手动锁定。

这个:

let mut out = File::new("test.out");
println!("{}", header);
for line in lines {
    println!("{}", line);
    writeln!(out, "{}", line);
}
println!("{}", footer);

锁定和解锁 io::stdout 很多,并对标准输出和文件进行线性数量(可能很小)的写入。加快速度:

{
    let mut out = File::new("test.out");
    let mut buf = BufWriter::new(out);
    let mut lock = io::stdout().lock();
    writeln!(lock, "{}", header);
    for line in lines {
        writeln!(lock, "{}", line);
        writeln!(buf, "{}", line);
    }
    writeln!(lock, "{}", footer);
}   // end scope to unlock stdout and flush/close buf> 

这仅锁定一次,并且仅在缓冲区填满(或 buf 关闭)时写入,因此它应该更快。

同样,对于网络 IO,您可能希望使用缓冲 IO。


推荐阅读