Является ли ввод-вывод с объектом раздела (CreateFileMapping) быстрее, чем базовый API-интерфейс (Read / WriteFile)? - PullRequest
2 голосов
/ 10 ноября 2010
  1. CreateFileMapping и MapViewOfFile, а затем мы выполняем ввод-вывод с помощью функции, такой как memcpy.
  2. Просто используйте Read / WriteFile.

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

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

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

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

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

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

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

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

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

0 голосов
/ 10 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...