Я читаю выровненные по секторам куски из файла, используя ReadFileEx (открывается с помощью CreateFile и флага FILE_FLAG_NO_BUFFERING), записываю время начала до вызова и время окончания в процедуре завершения (времена от QueryPerformanceCounter).
Размер чтения моего чанка постоянен, независимо от размера файла в целом. Смещения чанков ставятся в очередь последовательно, поэтому ReadFileEx всегда читает точку дальше в файле, чем последняя. Я заметил странное поведение, такое, что файл меньшего размера записывает значительно более быстрое время чтения фрагмента, чем файл большего размера.
В этом случае размер файла большего размера вдвое больше размера файла меньшего размера - я не должен ожидать, что это будет иметь значение на уровне чтения необработанных данных, поскольку я читаю фрагменты одинакового размера независимо от этого. То, что я вижу, - это файл меньшего размера, сообщающий о прочтении 160 МБ / с, и файл большего размера, сообщающий о 110 МБ / с.
Я все еще работаю с предположением, что в моем коде что-то другое, что вызывает проблему. Я также ожидаю, что операции чтения начнутся в некоторой точке, определенной операционной системой после того, как ReadFileEx + GetLastError вернет ERROR_IO_PENDING.
edit: Моя неточность синхронизации была дополнительно подтверждена настройкой потока чтения, чтобы у нее было больше времени для ожидания уведомлений завершения в обработчике в состоянии оповещения. Это увеличило сообщаемую скорость чтения, что указывает на то, что часть моей проблемы заключается в том, что обработчик завершения не вызывается сразу после завершения чтения (и поэтому мое время окончания позже, чем должно быть). Тем не менее, это увеличило заявленную скорость пропорционально как для файла большего, так и для меньшего размера.
TL; DR У меня вопрос, могу ли я измерить фактическое время операции чтения, а не время между вызовом ReadFileEx (которое может не сразу начать чтение) и процедура завершения?