0

我正在尝试使用内存映射文件 (MMF) 来读取我的 .csv 数据文件(非常大且耗时)。

我听说 MMF 非常快,因为它会缓存文件的内容,因此用户可以像访问内存一样访问磁盘中的内容。

我可以知道 MMF 是否比使用其他阅读方法更快?

如果这是真的,谁能告诉我一个如何从磁盘读取文件的简单示例?

提前谢谢了。

4

2 回答 2

0

我可以知道 MMF 是否比使用其他阅读方法更快?

如果您一次按顺序读取整个文件,那么内存映射文件可能与使用传统文件 I/O 大致相同。

谁能告诉我一个简单的例子如何从磁盘读取文件?

内存映射文件通常是操作系统功能,因此您必须告诉我们您使用的是哪个平台才能获得使用它的示例。

如果要按顺序读取文件,可以使用 C++ ifstream类或 C 运行时函数,如fopenfreadfclose

于 2013-08-15T12:54:25.970 回答
0

它是否更快取决于许多不同的因素(例如您正在访问什么数据,您如何访问它等。要确定什么适合您的案例,您需要对不同的解决方案进行基准测试,并查看您的最佳解决方案案子。

内存映射文件的主要好处是数据可以直接从文件系统复制到用户可访问的内存中。

在传统的(fstream::read()、fredad() 等)类型的文件读取中,文件的内容被读入操作系统中的临时缓冲区,然后将该缓冲区的(部分)复制到用户提供的缓冲。这是因为操作系统不能依赖那里的内存,并且很快就会变得非常混乱。对于内存映射文件,操作系统直接知道文件不同部分的内存在哪里(因为操作系统的任务是分配该内存并跟踪它的位置!),因此操作系统可以直接复制它。

但是,我强烈怀疑读取文件的方法是次要部分,而实际解释/解析/复制出文件可能是很大一部分。[推测,我们当然没有看到你的代码]。当然,如果文件非常大,磁盘本身可用的 I/O 速度可能会起到很大的作用。

于 2013-08-15T12:57:34.453 回答