是否有一个普遍接受的最快技术是用来读取文件到内存中的C + +?
我只会阅读文件。
我已经看到提升有一个实现,我已经看到了一些其他的实现在这里,但我想知道什么是最快的?
先谢谢你
如果有问题,我正在考虑文件高达1GB,这是Windows。
使用内存映射文件 ,也许使用boost wrapper来实现可移植性。
如果要读取大于虚拟地址空间的空闲,连续部分的文件,可以随意移动文件的映射部分。
考虑为您的情况使用内存映射文件 ,因为文件可以高达1 GB的大小。
在这里你可以从win32 API开始:
在MSDN页面上还有其他几个有用的API。
如果内存映射文件不适合您的应用程序,并且文件I / O是您的瓶颈,则使用I / O完成端口处理文件上的异步I / O将是您在Windows上可以获得的最快速度。
I / O完成端口为处理多处理器系统上的多个异步I / O请求提供了高效的线程模型。 当进程创建一个I / O完成端口时,系统为其唯一目的是为这些请求提供服务的请求创建一个关联的队列对象。 处理多个并发异步I / O请求的进程可以通过使用I / O完成端口与预分配线程池相结合,而不是通过在收到I / O请求时创建线程来更快更高效地完成。
一般来说, mmap就是这样。 但是在Windows下,他们发明了自己的方法,请参阅“文件映射” 。 Boost具有内存映射文件库,可以在一堆便携式代码下进行封装。
另外,如果你想要快速,你必须优化你的用例。 只是将文件内容映射到内存是不够的。 例如,确实可能不需要内存映射文件,最好使用异步文件I / O。 有许多问题的解决方案。