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

时间:2011-10-12 02:44:14

标签: io file-descriptor prefetch

我的问题是应用程序需要很长时间才能加载数千个文件。是的,我知道这需要很长时间,但我希望在任何时候都能让它更快。我所说的“加载”是打开文件来获取它的描述符,然后读取前100个字节左右。

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

所以我真正的问题是......我还能做些什么才能让它更快?有什么办法?有人做过这样的成功吗?

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

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

我的应用程序主要用于Windows,但是unix建议也会有所帮助。

如果有所作为,我用C ++编程。

谢谢, -julian

1 个答案:

答案 0 :(得分:0)

我首先想到的是,从程序化层面来看,这很难解决。

你会发现Linux和OSX可以在很短的时间内访问数千个这样的文件。我不知道你对这台机器有多少控制权。如果你可以在FAT分区上保存数千个文件,你会看到比使用NTFS更好的结果。

您扫描这些文件的频率以及更改频率。如果该比率在读取方面很大,则将每个文件的开头复制到缓存中是有意义的。缓存可以存储文件名,修改时间和每千个文件的100个字节。