I used the code below to measure the performance difference between reading large, sequential reads of a memory-mapped file, as compared to just calling ReadF
FILE_FLAG_NO_BUFFERING cripples ReadFile. The memory-mapped file is free to use whatever read-ahead algorithm it wants, and you've forbidden ReadFile to do the same. You've turned off caching only in the ReadFile version. Memory-mapped files can't work without file cache.