Cómo hacer que CreateFile sea lo más rápido posible
Necesito leer el contenido de varios miles de archivos pequeños al inicio. En Linux, solo usar fopen y leer es muy rápido. En Windows, esto sucede muy lentamente.
He cambiado a usar E / S superpuestas (E / S asíncrona) usando ReadFileEx, donde Windows realiza una devolución de llamada cuando los datos están listos para leer.
Sin embargo, las miles de llamadas reales a CreateFile en sí mismas siguen siendo un cuello de botella. Tenga en cuenta que proporciono mis propios buffers, enciendo el indicador NO_BUFFERING, doy la sugerencia SERIAL, etc. Sin embargo, las llamadas a CreateFile tardan varios segundos, mientras que en Linux todo se hace mucho más rápido.
¿Hay algo que se pueda hacer para preparar estos archivos para leerlos más rápidamente?
La llamada a CreateFile es:
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);