У меня есть программа на C++, которая читает файлы с жесткого диска и выполняет некоторую обработку данных в файлах. Я использую стандартные API Win32 для чтения файлов. Моя проблема в том, что эта программа несколько раз работает невероятно быстро, а затем внезапно замедляется до 1/6 от предыдущей скорости. Если я читаю одни и те же файлы снова и снова при нескольких запусках, то обычно первый запуск будет самым медленным. Затем он поддерживает скорость, пока я не прочитаю какой-нибудь другой набор файлов. Итак, мое очевидное предположение состояло в том, чтобы профилировать время доступа к диску. Я использовал утилиту perfmon и измерил количество байт чтения ввода-вывода/сек для моей программы. И как и ожидалось была огромная разница (~5 раз) в количестве прочитанных байт. Мои вопросы:
(1). Кэширует ли ОС (в моем случае Windows) недавно прочитанные файлы, чтобы последующие загрузки выполнялись быстрее?
(2). Если я могу гарантировать, что все файлы, которые я читаю, находятся в одном и том же каталоге, то могу ли я каким-либо образом разместить их на жестком диске, чтобы сократить время доступа к диску?
Могу ли я что-нибудь сделать для этого?