代码之家  ›  专栏  ›  技术社区  ›  jsn

预先将文件放入Windows页缓存

  •  3
  • jsn  · 技术社区  · 15 年前

    我有一个用c编写的程序,它允许用户滚动显示大约无数个小文件。每个文件在显示给用户之前都需要经过一定的处理(只读)。我已经实现了一个缓冲区,它可以在用户位置周围的某个半径内对文件进行预处理,所以如果它们是线性工作的,就不会有太多延迟。由于种种原因,我只能一次只能在一个文件上运行我的处理算法(虽然我可以打开多个文件,我可以从中读取),所以我的缓冲区按顺序加载。 我的处理算法已经尽可能优化了,但是我遇到了I/O问题。起初,我的加载过程很慢,但是当文件被访问了几次之后,速度就提高了大约5倍。因此,我强烈怀疑让我慢下来的是等待windows页面缓存将我的文件拉入内存。我对那类事情知之甚少。如果我能确保我的文件在我的处理算法需要它们之前就在缓存中,我就可以做生意了。

    我的问题是:在我真正开始阅读/处理文件之前,有没有办法说服/哄骗/欺骗/恐吓windows将我的文件加载到页面缓存中?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Hans Passant    15 年前

    只有一种方法可以将文件放入文件系统缓存:读取它。那是鸡和蛋的问题。通过使用读取文件的助手线程,可以先获得鸡蛋。它必须对下一个文件有某种智能。不要读太多。

        2
  •  1
  •   Community CDub    8 年前

    在POSIX系统上,你可以使用 posix_fadvise :

    Posix_Fadv_将需要

    指定应用程序希望在不久的将来访问指定的数据。

    然而,这似乎并不存在于windows上。 What is fadvise/madvise equivalent on windows ? - Stack Overflow 有一些选择。