python - 与 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
解决方案
如果我没记错的话,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。
推荐阅读
- node.js - TypeError: webpack.DefinePlugin 不是构造函数
- asp.net-core-webapi - 是否可以检索受 Dapper 查询影响的行数?
- go - 导入模块位于 Goland IDE 的子文件夹中
- r - rstudio如何选择在启动时/项目关闭时打开哪些文件
- algorithm - 使用具有重复值的中序和预序构造二叉树
- java - 从 Excel 导出的 CSV (UTF-8) 文件的默认行终止符是什么?
- git - 如何撤消仅特定 git commit 的更改?
- eclipse - 无法在 Eclipse 中的动态 Web 项目中选择现有服务器
- r - 管道工找不到请求正文
- wordpress - 为科学期刊网站选择 cms