Чтение с помощью объектов сопоставления файлов в С++

Я пытаюсь использовать Memory Mapped File (MMF) для чтения моего файла данных.csv (очень большой и много времени).

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

Могу ли я узнать, работает ли MMF быстрее, чем с использованием других методов чтения?

Если это правда, может ли кто-нибудь показать мне простой пример того, как читать файл с диска?

Спасибо заранее.

2 ответа

Если это происходит быстрее или не зависит от многих разных факторов (таких как данные, к которым вы обращаетесь, как вы обращаетесь к ним и т.д. Чтобы определить, что подходит для ВАШЕГО случая, вам необходимо сравнить различные решения и посмотреть, что лучше всего в вашем дело.

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

В традиционных (fstream :: read(), fredad() и т.д.) Типах чтения файлов содержимое файла считывается во временный буфер в ОС, затем (часть) этот буфер копируется в предоставленный пользователю буфер. Это связано с тем, что ОС не может полагаться на находящуюся там память, и она становится довольно грязной довольно быстро. Для файлов с отображением памяти ОС знает, где находится память для разных разделов (потому что задача ОС назначает эту память и отслеживает, где она есть!) Файла, поэтому ОС может просто скопировать его прямо.

Тем не менее, я сильно подозреваю, что метод чтения файла является второстепенной частью, и фактическая интерпретация/разбор/копирование из файла могут быть значительной частью. [Спекуляция, конечно, мы не видели вашего кода]. И, конечно, скорость ввода-вывода, доступная из самого диска, может играть большой фактор, если файл очень большой.


Могу ли я узнать, работает ли MMF быстрее, чем с использованием других методов чтения?

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

может ли кто-нибудь показать мне простой пример того, как читать файл с диска?

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

Если вы хотите последовательно читать файл, вы можете использовать класс C++ ifstream или функции времени выполнения C, такие как fopen, fread и fclose.

licensed under cc by-sa 3.0 with attribution.