使用c ++读取文件的最快方法是什么?

时间:2013-05-08 09:44:02

标签: c++ visual-c++ file-io

读取文件意味着我将读取硬盘上的每个文档(doc,docx,xl​​s,xml,txt,...)。

我认为我的大部分文件大概都是10KB~1MB。

如果有任何特定字词,我会阅读文件并过滤文字。

所以我的猜测是我应该有线程池和1个线程来读取文件和其他线程进行过滤。

我听说有MMFCreateFile / ReadFile或I / O完成端口来读取每个文件。

我应该使用什么功能?

3 个答案:

答案 0 :(得分:4)

在我的测试中,内存映射文件是将内容加载到内存中的最快方式。

我执行的测试是在Linux上进行的,但是由于将文件加载到内存映射区域的方法是将页面中的数据一次复制到OS拥有的内存中[内存映射文件后备内存是由操作系统完全拥有和处理,因此操作系统能够“锁定”内存等等。这比将一段文件读入内核缓冲区然后将该内容复制到应用程序提供的缓冲区更快,因为它避免了一个副本。但是,对于大型文件(或许多小文件),主要限制因素仍然是“硬盘传输数据的速度有多快” - 对于我的系统而言,这个数据大约为60MB / s。您可以使它比系统生成的速度慢,但速度不快。

答案 1 :(得分:1)

对于纯IO速度,您可能想尝试CreateFileMappingMapViewOfFile。我没有在Windows下测量过这个,但是 在Linux下使用类似的技术可能会产生重大影响 加速。

答案 2 :(得分:-1)

没有“最快”的方法来读取I / O.您不能以fread或等价物获得任何速度。使用线程对你没有帮助,因为硬盘I / O无论如何都是主要的瓶颈。

批量读取硬盘中的所有文件时,速度最终取决于硬盘的速度。可能有95%的时间用于等待I / O,因此多线程最多可以将速度提高5-6%,但不会像使程序运行速度快两倍。