Не совсем понятно, что вы подразумеваете здесь под «связным».
В любом случае вы можете начать с рассмотрения того, как вы на самом деле используете данные из файла. Если вы в основном читаете файл в последовательных блоках от начала до конца, вам может быть полезно передать FILE_FLAG_SEQUENTIAL_SCAN
при вызове CreateFile
. И наоборот, если вы в основном используете один блок из одного места, а затем, скорее всего, , а не , используя другой блок, который (почти) последовательно с этим, вы могли бы выиграть, передав вместо него FILE_FLAG_RANDOM_ACCESS
. Если вы достаточно уверены, что после прочтения одного блока данных вы не будете использовать этот же блок данных снова в ближайшее время, вы можете воспользоваться FILE_FLAG_NO_BUFFERING
.
Еще одна возможность - просто читать большие куски за раз, если вы можете использовать дополнительные данные. Чтение только 4K за раз может привести к значительным накладным расходам.
Наконец, если вы можете отключить обработку от самого чтения, вы можете рассмотреть возможность использования асинхронного чтения. Основная идея заключается в том, что вы можете сказать ему прочитать некоторые данные, а когда данные будут прочитаны, вы можете обработать блок данных - но между ними вы можете делать другие вещи - например, выдавать больше операций чтения, поэтому диск будет почти всегда заняты чтением данных.