Если вы ограничены вводом / выводом, сохраняя читаемый человеком текст на жестком диске, я ожидаю, что сжатие сократит общее время выполнения.
Если у вас свободное 2 ГГц ядро и относительно быстрый 100 МБ / с потоковый жесткий диск,
Для того чтобы вдвое сократить время регистрации, требуется сжатие не менее 2: 1 и не более примерно 10 циклов ЦП на несжатый байт, чтобы компрессор обдумывал данные.
При использовании двухтрубного процессора это (очень приблизительно) 20 инструкций на байт.
Я вижу, что LZRW1-A (один из самых быстрых алгоритмов сжатия) использует от 10 до 20 инструкций на байт и сжимает типичный текст на английском языке примерно в 2: 1.
В верхнем конце (20 инструкций на байт) вы находитесь на грани между ограничением ввода-вывода и ограничением процессора. В среднем и нижнем конце вы все еще ограничены вводом-выводом, так что есть несколько доступных циклов (немного) для немного более сложного компрессора, чтобы обдумывать данные немного дольше.
Если у вас более типичный нестандартный жесткий диск или жесткий диск работает медленнее по какой-либо другой причине (фрагментация, другие многозадачные процессы с использованием диска и т. Д.)
тогда у вас будет больше времени для более сложного компрессора, чтобы обдумать данные.
Вы можете подумать о создании сжатого раздела, сохранении данных в этом разделе (позволяя драйверу устройства сжать его) и сравнении скорости с исходной скоростью.
Это может занять меньше времени и с меньшей вероятностью привести к появлению новых ошибок, чем изменение вашей программы и компоновка в алгоритме сжатия.
Я вижу список сжатых файловых систем на основе FUSE и слышу, что NTFS также поддерживает сжатые разделы.