将文件读入内存的最快技术?

时间:2012-05-31 15:29:20

标签: c++ windows file memory

是否有一种普遍接受的最快技术用于在c ++中将文件读入内存?

我只会阅读该文件。

我看过boost有一个实现,我在这里看到了其他一些实现,但我想知道什么是最快的?

提前谢谢

如果重要,我正在考虑高达1GB的文件,这是针对Windows的。

4 个答案:

答案 0 :(得分:6)

使用memory-mapped files,可能使用boost wrapper进行移植。

如果要读取大于虚拟地址空间的空闲连续部分的文件,可以随意移动文件的映射部分。

答案 1 :(得分:4)

请考虑在您的情况下使用Memory-Mapped Files,因为文件大小可达1 GB。

在这里你可以从win32 API开始:

MSDN页面上还有其他一些有用的API。

答案 2 :(得分:2)

如果内存映射文件不适合您的应用程序,并且文件I / O是您的瓶颈,使用I/O completion port处理文件上的异步I / O将是您可以获得的最快速度视窗。

  

I / O完成端口为其提供了有效的线程模型   在多处理器上处理多个异步I / O请求   系统。当进程创建I / O完成端口时,系统   为唯一目的的请求创建关联的队列对象   为这些请求提供服务。处理许多并发的进程   异步I / O请求可以更快速有效地执行此操作   将I / O完成端口与预先分配的线程结合使用   池,而不是在收到I / O请求时创建线程。

答案 3 :(得分:1)

一般来说,mmap就是这样。但在Windows中他们发明了自己的方法,请参阅"File Mapping"。 Boost有Memory-Mapped Files库,它可以在一堆便携式代码下包含两种方式。

此外,如果您想要快速,则必须针对您的用例进行优化。仅将文件内容映射到内存是不够的。例如,确实可能不需要内存映射文件,最好使用异步文件I / O.许多问题有很多解决方案。