Сопоставление памяти файлов и CreateFile / ReadFile

Каковы недостатки (если таковые имеются) использования файла с отображением памяти для чтения (файлы обычного размера) по сравнению с тем же действием с использованием комбинации CreateFile ReadFile?


person Community    schedule 13.03.2009    source источник


Ответы (3)


С ReadFile / WriteFile у вас есть детерминированная семантика обработки ошибок. Когда вы используете файлы с отображением памяти, ошибки возвращаются путем выдачи исключения.

Вдобавок, если отображаемый в память файл должен попасть на диск (или, что еще хуже, в сеть), чтение вашей памяти может занять несколько секунд (или даже минут). В зависимости от вашего приложения это может вызвать неожиданные сбои.

Если вы используете ReadFile / WriteFile, вы можете использовать асинхронные варианты API, чтобы вы могли контролировать это поведение.

У вас также будет более детерминированная производительность, если вы используете ReadFile, особенно если ваш шаблон ввода-вывода предсказуем - ввод-вывод с отображением памяти часто бывает случайным, в то время как ReadFile почти всегда является последовательным (поскольку ReadFile читает в текущей позиции файла и продвигает текущий файл должность).

person ReinstateMonica Larry Osterman    schedule 15.03.2009

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

person facetus    schedule 12.11.2009
comment
Есть ли у вас какой-либо источник этой мудрости или связанного с ней материала, проливающего больше света на этот феномен? Я имею в виду, что это вполне может быть так, но из того, что я там читаю, системный кеш звучит очень расплывчато, мы говорим о страницах с файловыми данными, которые накапливаются перед заменой? - person amn; 24.04.2018
comment
Источником является опыт моей команды с интенсивным дисковым вводом-выводом. У нас были проблемы, пока мы не переключились на сопоставленные файлы. Сопоставленные файлы увеличили производительность и снизили объем памяти. Более подробно рассказать не могу, это было лет 10 назад, просто не помню. :) - person facetus; 24.04.2018

Вам понадобится более сложный код для установления сопоставления файлов, чем для простого открытия и чтения. Отображение файлов предназначено для произвольного доступа к разделу файла. Если вам это не нужно, просто не беспокойтесь о сопоставлении файлов.

Кроме того, если когда-нибудь понадобится перенести ваш код на другую платформу, вы сделаете это намного проще и быстрее, если не будете использовать сопоставление файлов.

person sharptooth    schedule 13.03.2009