我有一个用C编写的程序,允许用户滚动显示大约几万个小文件。每个文件在显示给用户之前需要经过一定量的处理(只读)。我已经实现了一个缓冲区,用于在用户位置周围的某个半径内预处理文件,因此如果它们通过线性工作,则没有太多延迟。由于各种原因,我实际上只能一次在一个文件上运行我的处理算法(虽然我可以打开多个文件,我可以从中读取)所以我的缓冲区按顺序加载。 我的处理算法尽可能优化,但我遇到了I / O问题。起初,我的加载过程很慢,但是当文件被访问几次时,它加速了大约5倍。因此,我强烈怀疑让我失望的是等待Windows页面缓存将我的文件拉入内存。我对这种事情知之甚少。如果我可以确保我的文件在我的处理算法需要之前就在缓存中,那么我就会开展业务。
我的问题是:在我真正开始阅读/处理它们之前,有没有办法说服/哄骗/欺骗/恐吓Windows将我的文件加载到页面缓存中?
答案 0 :(得分:1)
只有一种方法可以将文件放入文件系统缓存中:读取它。这是一个鸡与蛋的问题。您可以通过使用读取文件的辅助线程来获取egg。它必须有一些关于下一个文件可能是什么的聪明才智。而不是读太多。
答案 1 :(得分:1)
在POSIX系统上,您使用posix_fadvise:
POSIX_FADV_WILLNEED
指定应用程序希望在不久的将来访问指定的数据。
但是,Windows上似乎不存在这种情况。 What is fadvise/madvise equivalent on windows ? - Stack Overflow有一些替代方案。