Io 如何快速打开和读取1000个文件

Io 如何快速打开和读取1000个文件,io,file-descriptor,prefetch,Io,File Descriptor,Prefetch,我的问题是应用程序加载数千个文件的时间太长。是的,我知道这将需要很长时间,但我想让它更快的任何时间。我所说的“加载”是指打开文件以获取其描述符,然后读取文件的前100个字节左右 因此,我的主要策略是创建第二个线程来打开和关闭(不读取任何内容)所有文件。这似乎很有帮助,因为线程在主线程之前运行,我猜操作系统正在提前缓存这些文件描述符,这样当我的主线程打开它们时,它就会快速打开。这实际上有所帮助,因为当我的主线程解析从这些文件读入的数据时,线程可以开始缓存这些文件描述符 所以我真正的问题是…我还能做

我的问题是应用程序加载数千个文件的时间太长。是的,我知道这将需要很长时间,但我想让它更快的任何时间。我所说的“加载”是指打开文件以获取其描述符,然后读取文件的前100个字节左右

因此,我的主要策略是创建第二个线程来打开和关闭(不读取任何内容)所有文件。这似乎很有帮助,因为线程在主线程之前运行,我猜操作系统正在提前缓存这些文件描述符,这样当我的主线程打开它们时,它就会快速打开。这实际上有所帮助,因为当我的主线程解析从这些文件读入的数据时,线程可以开始缓存这些文件描述符

所以我真正的问题是…我还能做些什么来加快速度?有什么办法?有人成功地做到了这一点吗

我听说过操作系统预取调用,但它是针对虚拟内存页的。有没有办法告诉操作系统,嘿,我很快就会被需要所有这些文件——我建议你提前开始为我收集它们。我的前瞻线程非常粗糙

我是否可以使用低级磁盘技术?是否有一种文件访问模式会有所帮助?现在,加载的文件都来自同一个文件夹。我想无法确定它们在磁盘上的确切位置,以及磁盘上打开文件的顺序最快。我还猜测,磁盘上也有一些硬件使其尽可能高效

我的应用程序主要针对windows,但unix建议也会有所帮助

<>我在C++编程,如果这有区别。< /P> 谢谢,
-朱利安(julian)

我的第一个想法是,这将很难从程序层面解决

您会发现Linux和OSX可以在Windows所需时间的一小部分内访问数千个这样的文件。我不知道你对机器有多大的控制权。如果您可以将数千个文件保存在FAT分区上,那么您应该会看到比NTFS更好的结果

您多久扫描一次这些文件,以及它们多久更改一次。如果读取端的比率很大,那么将每个文件的开头复制到缓存中是有意义的。缓存可以存储文件名、修改时间和1000个文件中每个文件的100字节