在我的硬盘上。
我想我的大多数文件都会有10KB ~ 1MB的大小。
如果有任何特定的单词,我将读取文件并过滤文本。
所以我的猜测是我应该有一个线程池和一个线程来读取文件,其他线程进行过滤。
我应该使用什么函数?
发布于 2013-05-08 18:10:48
在我的测试中,内存映射文件是将内容加载到内存中的最快方法,差距很小。
我执行的测试是在Linux上执行的,但由于将文件加载到内存映射区域的方法是一次将页面中的数据复制到操作系统拥有的内存中,因此支持内存的内存映射文件完全由操作系统拥有和处理,因此操作系统有能力将该内存“锁定”在适当的位置,等等。这比将文件读取到内核缓冲区,然后将内容复制到应用程序提供的缓冲区中更快,因为它避免了一次复制。然而,对于大文件(或许多小文件),主要的限制因素仍然是“硬盘传输数据的速度有多快”--对于我的系统来说,它大约是60MB/s。你可以让它比系统产生的数据慢,但不能更快。
发布于 2013-05-08 18:12:00
对于纯IO速度,您可能希望尝试使用CreateFileMapping和MapViewOfFile。我没有在Windows下测试过这一点,但在Linux下使用类似的技术可以显著提高速度。
发布于 2013-05-08 18:04:02
读取I/O没有“最快”的方法,您不能比fread或等效的方法更快。使用线程对您没有帮助,因为硬盘I/O无论如何都会成为主要的瓶颈。
批量读取硬盘中的所有文件时,您的速度最终将取决于硬盘的速度。95%的时间可能会花在等待I/O上,所以多线程最多只能提高5-6%的速度,但不会让你的程序运行快一倍。
https://stackoverflow.com/questions/16437413
复制相似问题