【发布时间】:2016-02-25 16:55:39
【问题描述】:
我正在开发一个需要处理大量数据(以 GB 为单位)的应用程序。我在任何时候都不需要一次所有的数据。可以对数据进行分段并仅在任何给定实例的某个部分上工作(从而将其带入内存)。
我读过大多数需要处理大量数据的应用程序,通常是通过使用内存映射文件来实现的。进一步阅读内存映射文件,我发现从内存映射文件读取/写入数据比普通文件 IO 更快,因为我们最终使用高度优化的页面文件算法来执行读写。
以下是我的疑问:
- 对文件 IO 使用内存映射文件(我计划使用 boost::file_mapping 并且我正在使用 Windows)与使用文件流有何不同?
- 与使用文件流(在 7200 rpm 的传统硬盘上)相比,内存映射文件的数据读取/写入速度可以提高多少?
- 内存映射文件是处理如此大量数据的唯一方法吗?有没有更好的方法(考虑到我的用例)?
【问题讨论】:
-
有趣的案例:stackoverflow.com/a/25150519/85371(fmapping 结果比基于流的 IO 慢)
标签: c++ boost file-mapping