2009-03-13 3 views

ответ

2

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

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

13

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

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

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

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

2

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

Смежные вопросы