Производительность Win32 файлы с отображенной памятью по сравнению с CRT fopen/fread

Я должен читать (сканируют) файл последовательно и обрабатывают его содержание. Размер файла может быть чем-либо от очень маленького (некоторый КБ) к очень большому (некоторый ГБ).

Я попробовал два метода с помощью VC10/VS2010 в 64-разрядном Windows 7:

  1. Win32 файлы с отображенной памятью (т.е. CreateFile, CreateFileMapping, MapViewOfFile, и т.д.)
  2. fopen и освобожденный от CRT.

Я думал, что метод файла с отображенной памятью мог быть быстрее, чем функции CRT, но некоторые тесты показали, что скорость является почти тем же в обоих случаях.

Следующие операторы C++ используются для MMF:

HANDLE hFile = CreateFile(
    filename,
    GENERIC_READ,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_FLAG_SEQUENTIAL_SCAN,
    NULL
    );

HANDLE hFileMapping = CreateFileMapping(
    hFile,
    NULL,
    PAGE_READONLY,
    0,
    0,
    NULL
    );

Файл читается последовательно, блок блоком; каждый блок SYSTEM_INFO.dwAllocationGranularity в размере.

Полагая, что скорость является почти тем же с MMF и CRT, я использовал бы функции CRT, потому что они являются более простыми и многоплатформенными. Но мне любопытно: я использую метод MMF правильно? Действительно ли нормально, что производительность MMF в этом случае сканирования файла последовательно совпадает с CRT один?

Спасибо.

13
задан EmbeddedProg 20 October 2010 в 16:17
поделиться