Является ли ввод-вывод с объектом раздела (CreateFileMapping) быстрее, чем базовый API (Read/WriteFile)?

  1. CreateFileMapping и MapViewOfFile, а затем мы выполняем ввод-вывод с помощью такой функции, как memcpy.
  2. Просто используйте чтение/запись файла.

Первый быстрее второго? Я этого не понимаю.

Почему это быстрее?
Если мы используем объект раздела, тогда мы можем получить больше преимуществ кэша от VMM или Cache Manager?


person Benjamin    schedule 10.11.2010    source источник


Ответы (2)


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

Если память в файле отображения памяти не изменена, нет необходимости сбрасывать страницу в файл подкачки, поскольку данные уже находятся в файле, и Windows может повторно прочитать страницу с диска. Файлы .EXE и .DLL загружаются с использованием этого механизма и, таким образом, являются собственным хранилищем страниц.

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

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

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

Оба механизма будут использовать диспетчер VMM/Cache.

person Preet Sangha    schedule 10.11.2010

Использование ReadFile/WriteFile включает в себя несколько дополнительных операций копирования блоков памяти, поэтому это будет медленнее, чем использование MMF. Другой вопрос, насколько он будет медленнее — это нужно измерять самому.

person Eugene Mayevski 'Callback    schedule 10.11.2010