Я должен читать (сканируют) файл последовательно и обрабатывают его содержание. Размер файла может быть чем-либо от очень маленького (некоторый КБ) к очень большому (некоторый ГБ).
Я попробовал два метода с помощью VC10/VS2010 в 64-разрядном Windows 7:
Я думал, что метод файла с отображенной памятью мог быть быстрее, чем функции 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 один?
Спасибо.