Я пытаюсь использовать Memory Mapped File (MMF) для чтения моего файла данных .csv (очень большой и трудоемкий).
Я слышал, что MMF очень быстрый, поскольку он кэширует содержимое файла, поэтому пользователи могут получить доступ к содержимому на диске, как в памяти.
Могу ли я узнать, быстрее ли MMF, чем другие методы чтения?
Если это правда, может кто-нибудь показать мне простой пример, как читать файл с диска?
Спасибо заранее.
Могу ли я узнать, быстрее ли MMF, чем другие методы чтения?
Если вы читаете весь файл последовательно за один проход, то файл с отображением в памяти, вероятно, примерно такой же, как при использовании обычного файлового ввода-вывода.
Может кто-нибудь показать мне простой пример, как прочитать файл с диска?
Файлы с отображением в памяти, как правило, являются функцией операционной системы, поэтому вы должны сообщить нам, на какой платформе вы находитесь, чтобы получить пример ее использования.
Если вы хотите прочитать файл последовательно, вы можете использовать C ++ ifstream класс или функции времени выполнения C, такие как Еореп, Fread, а также fclose.
Если это быстрее или нет, зависит от множества различных факторов (например, к каким данным вы обращаетесь, как вы к ним обращаетесь и т. Д. Чтобы определить, что подходит для ВАШЕГО случая, вам нужно сравнить различные решения и посмотреть, что лучше в вашем случае. дело.
главный Преимущество файлов, отображаемых в память, заключается в том, что данные могут быть скопированы непосредственно из файловой системы в доступную пользователю память.
В традиционных типах чтения файлов (fstream :: read (), fredad () и т. Д.) Содержимое файла считывается во временный буфер в ОС, затем (часть) этот буфер копируется в предоставленный пользователем буфер. Это связано с тем, что ОС не может полагаться на наличие памяти, и она довольно быстро запутывается. Для файлов, отображаемых в память, ОС напрямую знает, где находится память для различных разделов (потому что задача ОС — выделить эту память и отследить, где она находится!) Файла, поэтому ОС может просто скопировать его прямо в файл.
Тем не менее, я сильно подозреваю, что метод чтения файла является второстепенной частью, и фактическая интерпретация / разбор / копирование файла может быть большой частью. [Предположение, мы не видели ваш код, конечно]. И, конечно, скорость ввода-вывода, доступная на самом диске, может играть большую роль, если файл очень большой.