2013-08-15 4 views
0

Я пытаюсь использовать файл с отображением памяти (MMF) для чтения моего файла данных .csv (очень большой и много времени).Чтение с помощью файлов сопоставления файлов в C++

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

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

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

Большое спасибо заранее.

+1

Получите диск SSD и используйте MMF. Задача решена –

+0

Получите 2 SSD и рейда. http://www.tomshardware.com/reviews/ssd-raid-benchmark,3485-7.html – Chemistpp

+4

Нет, получите SSD-накопитель _solid state_. Они лучше. –

ответ

0

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

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

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

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

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

0

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

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

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

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

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