I / O с объектом раздела (CreateFileMapping) быстрее, чем основные API (Read / WriteFile)?

StackOverflow https://stackoverflow.com/questions/4142125

Вопрос

  1. CreateFilemapping и MapViewoffile, а затем мы делаем ввод / вывод с функцией, такими как memcpy.
  2. Просто используйте чтение / writeFile.

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top