Как сделать CreateFile максимально быстрым
Мне нужно прочитать содержимое нескольких тысяч маленьких файлов при запуске. В Linux просто использование fopen и чтение очень быстро. В Windows это происходит очень медленно.
Я переключился на использование перекрывающегося ввода-вывода (асинхронного ввода-вывода) с использованием ReadFileEx, где Windows выполняет обратный вызов, когда данные готовы для чтения.
Однако фактические тысячи вызовов самого CreateFile все еще являются узким местом. Обратите внимание, что я предоставляю свои собственные буферы, включаю флаг NO_BUFFERING, даю подсказку SERIAL и т. Д. Однако вызовы CreateFile занимают несколько десятков секунд, тогда как в linux все выполняется намного быстрее.
Можно ли что-нибудь сделать, чтобы эти файлы были готовы к более быстрому чтению?
Вызов CreateFile:
hFile = CreateFile(szFullFileName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING | FILE_FLAG_SEQUENTIAL_SCAN,
NULL);