Вот моя тестовая программа:
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 zip составляет около 14x (для аналогичного выходного файла с незначительной разницей в размерах).
Я что-то не так делаю в коде, который может объяснить производительность Rust?Как я могу улучшить его, чтобы приблизиться к производительности системы?