Каковы недостатки (если таковые имеются) использования файла с отображением памяти для чтения (файлы обычного размера) по сравнению с тем же действием с использованием комбинации CreateFile ReadFile?
Сопоставление памяти файлов и CreateFile / ReadFile
Ответы (3)
С ReadFile / WriteFile у вас есть детерминированная семантика обработки ошибок. Когда вы используете файлы с отображением памяти, ошибки возвращаются путем выдачи исключения.
Вдобавок, если отображаемый в память файл должен попасть на диск (или, что еще хуже, в сеть), чтение вашей памяти может занять несколько секунд (или даже минут). В зависимости от вашего приложения это может вызвать неожиданные сбои.
Если вы используете ReadFile / WriteFile, вы можете использовать асинхронные варианты API, чтобы вы могли контролировать это поведение.
У вас также будет более детерминированная производительность, если вы используете ReadFile, особенно если ваш шаблон ввода-вывода предсказуем - ввод-вывод с отображением памяти часто бывает случайным, в то время как ReadFile почти всегда является последовательным (поскольку ReadFile читает в текущей позиции файла и продвигает текущий файл должность).
Большим преимуществом сопоставления файлов является то, что оно не влияет на системный кеш. Если ваше приложение выполняет чрезмерное количество операций ввода-вывода с помощью ReadFile, ваш системный кеш будет расти, потребляя все больше и больше физической памяти. Если ваша ОС 32-битная и у вас намного больше 1 ГБ памяти, вам повезло, так как в 32-битной Windows размер системного кеша ограничен 1 ГБ. В противном случае системный кеш будет использовать всю доступную физическую память, и диспетчер памяти вскоре начнет очищать страницы других процессов на диске, усиливая операции с диском, а не сокращая их. Эффект особенно заметен в 64-битной Windows, где размер кеша ограничен только доступной физической памятью. С другой стороны, отображение файлов не приводит к чрезмерному разрастанию системного кеша и в то же время не снижает производительность.
Вам понадобится более сложный код для установления сопоставления файлов, чем для простого открытия и чтения. Отображение файлов предназначено для произвольного доступа к разделу файла. Если вам это не нужно, просто не беспокойтесь о сопоставлении файлов.
Кроме того, если когда-нибудь понадобится перенести ваш код на другую платформу, вы сделаете это намного проще и быстрее, если не будете использовать сопоставление файлов.