[...] макросы по умолчанию print!
блокируют STDOUT для каждой операции записи . Поэтому, если у вас текстовый вывод большего размера (или ввод из STDIN), вы должны заблокировать вручную.
This:
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>
Это блокирует только один раз и записывает только после заполнения буфера (или закрытия буфера), так что это должно быть намного быстрее.
Аналогично для сетиIO, вы можете использовать буферизованный IO.