0

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

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

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

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

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

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

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

谢谢,-朱利安

4

1 回答 1

0

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

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

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

于 2011-10-12T02:58:02.670 回答