使用C++中的文件映射对象进行读取
Read with File Mapping Objects in C++
我正在尝试使用内存映射文件(MMF)读取.csv数据文件(非常大且耗时)。
我听说MMF非常快,因为它缓存文件的内容,因此用户可以像访问内存一样访问磁盘中的内容。
我可以知道MMF是否比使用其他阅读方法更快吗?
如果这是真的,有人能给我看一个如何从磁盘读取文件的简单例子吗?
非常感谢。
我可以知道MMF是否比使用其他阅读方法更快吗?
如果在一个过程中按顺序读取整个文件,那么内存映射文件可能与使用传统文件I/O大致相同。
有人能给我看一个如何从磁盘读取文件的简单例子吗?
内存映射文件通常是操作系统的一个功能,所以你必须告诉我们你在哪个平台上才能获得使用它的示例
如果要按顺序读取文件,可以使用C++ifstream类或C运行时函数,如fopen、fread和fclose。
它是否更快取决于许多不同的因素(例如,您正在访问什么数据,如何访问它等)。要确定什么适合您的情况,您需要对不同的解决方案进行基准测试,并查看什么最适合您的情况。
内存映射文件的主要优点是可以将数据直接从文件系统复制到用户可访问的内存中。
在传统的(fstream::read()、fredad()等)类型的文件读取中,文件的内容被读取到操作系统中的临时缓冲区,然后(部分)该缓冲区被复制到用户提供的缓冲区。这是因为操作系统不能依赖内存,而且很快就会变得非常混乱。对于内存映射文件,操作系统直接知道文件不同部分的内存在哪里(因为分配内存并跟踪它在哪里是操作系统的任务!),所以操作系统可以直接复制它。
然而,我强烈怀疑读取文件的方法只是一个次要部分,而文件的实际解释/解析/复制很可能是一个重要部分。[推测,我们当然没有看到您的代码]。当然,如果文件非常大,DISK本身的I/O速度可能会起到很大的作用。
- 如何在C++中从文件中读取/写入多个对象
- 使用对象文件读取三角形数据网格
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 我可以读取静态对象中的文件.txt吗?C++
- 从对象C++中的文件读取内容时出现分段错误
- 如何从文件中读取指向对象的指针?
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组
- 从一个文件中读取多个序列化对象
- 读取互斥对象范围之外的volatile变量,而不是std::atomic
- 用rapidjson读取子对象向量
- 从文本文件中读取对象
- 使用 OpengGLES2(角度)从帧缓冲区对象读取
- C++两次从文件保存对象读取多重继承
- 通过 ifstream 对象读取C++中的文件
- 将C 对象读取到随机访问文件中
- 使用 C++ 将对象读取和写入二进制文件
- C++在尝试编写对象读取器时,在尝试从一个向量获取数据时出错
- 为什么这个ifstream无法将平面对象读取到内存中
- 如何在C++中从istream对象读取时检测空行
- C++使用fstream对象读取和写入文本文件时出现问题