1) Проверьте размер сектора вашего диска.
2) Убедитесь, что диск дефрагментирован.
3) Считайте данные, которые являются «локальными», до последних выполненных вами операций чтения, чтобы улучшить локальность кэша (кэширование выполняется операционной системой, и многие жесткие диски также имеют встроенный кэш).
4) Пишите данные непрерывно.
Для повышения производительности записи кэшируйте блоки данных в памяти до тех пор, пока вы не достигнете кратного размера сектора, затем инициируйте асинхронную запись на диск. Не перезаписывайте данные, которые в настоящее время записываются, пока вы не можете быть уверены, что данные были записаны (т.е. синхронизировать запись). Здесь может помочь двойная или тройная буферизация.
Для лучшей производительности чтения вы можете удвоить чтение буфера. Допустим, вы кешируете 16K блоков при чтении. Считать 1-е 16К с диска в блок 1. Инициировать асинхронное чтение 2-го 16К в блок 2. Начать работу с блоком 1. Когда вы закончите с блоком 1, синхронизируйте чтение блока 2 и начните асинхронное чтение в блок 1 3-й блок 16K в блок 1. Теперь работайте с блоком 2. Когда закончите синхронизацию чтения 3-го блока 16K, инициируйте асинхронное чтение 4-го 16K в блок 2 и работайте с блоком 1. Промойте и повторяйте, пока не обработаете все данные.
Как уже говорилось, чем меньше данных вы должны прочитать, тем меньше времени будет потрачено на чтение с диска, поэтому вполне может стоить прочитать сжатые данные и потратить время ЦП на расширение каждого блока при чтении. Равное сжатие блока перед записью сэкономит ваше дисковое время. Будет ли это выигрыш или нет, будет зависеть от того, насколько интенсивна загрузка вашего процессора.
Также, если обработка блоков является асимметричной (то есть обработка блока 1 может занять в 3 раза больше времени, чем обработка блока 2), тогда рассмотрите тройную или более буферизацию для чтения.