【问题标题】:How to open and read 1000s of files very quickly如何快速打开和读取 1000 多个文件
【发布时间】:2011-10-12 02:44:13
【问题描述】:

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

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

所以我真正的问题是......我还能做些什么来加快速度?有哪些方法?有没有人成功做到这一点?

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

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

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

如果有什么不同的话,我正在用 C++ 编程。

谢谢, -朱利安

【问题讨论】:

    标签: io file-descriptor prefetch


    【解决方案1】:

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

    您会发现 Linux 和 OSX 可以访问数以千计的此类文件,而所需时间只是 Windows 的一小部分。我不知道你对机器有多少控制权。如果您可以将数千个文件保存在一个 FAT 分区上,您应该会看到比使用 NTFS 更好的结果。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2017-12-13
      • 2022-06-13
      相关资源
      最近更新 更多