这是我的基准测试程序:
extern crate zip;
use std::fs::File;
use std::io::copy;
use zip::write::FileOptions;
use zip::ZipWriter;
fn main() {
let mut src = File::open("/tmp/src.mxf").unwrap(); // 624 Mb file.
let dest = File::create("/tmp/test.zip").unwrap();
let mut zip_writer = ZipWriter::new(dest);
zip_writer
.start_file("src.mxf", FileOptions::default())
.unwrap();
copy(&mut src, &mut zip_writer).unwrap();
zip_writer.finish().unwrap();
}
使用发布模式编译程序:
time ./zip_bench
./zip_bench 62,68s user 146,21s system 99% cpu 3:28,91 total
使用系统zip
二进制文件压缩得到的相同文件:
time zip /tmp/test2.zip /tmp/src.mxf
zip /tmp/test2.zip /tmp/src.mxf 13,77s user 0,19s system 99% cpu 13,965 total
系统和Rust压缩之间的时间差大约为14倍(对于相似的输出文件,大小差异微不足道)。
我的代码中是否有什么错误可以解释Rust性能问题?我该如何改进它以接近系统性能?
当前实现在速度方面仍然比像zlib和miniz这样的C库差一些。
。因此,也许可以使用一些ffi来使用zlib进行压缩以改善性能。 - PeterTBufReader
/BufWriter
来包装你的File
吗? - JmbBufWriter
后,压缩速度比本地zip命令慢3倍,这是一个巨大的改进。 - Benoit CourtineBufReader
?在两端进行缓冲对于获得高性能的 I/O 是很重要的。 - Zenton