Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 预先将文件获取到Windows页面缓存中_C_Windows_Performance - Fatal编程技术网

C 预先将文件获取到Windows页面缓存中

C 预先将文件获取到Windows页面缓存中,c,windows,performance,C,Windows,Performance,我有一个用C编写的程序,允许用户滚动显示大约无数个小文件。每个文件在显示给用户之前都需要经过一定量的处理(只读)。我已经实现了一个缓冲区,它在用户位置周围的某个半径范围内对文件进行预处理,因此,如果它们以线性方式工作,则不会有太多延迟。由于各种原因,我实际上一次只能在一个文件上运行我的处理算法(尽管我可以打开多个文件,并且可以从中读取),所以我的缓冲区按顺序加载。 我的处理算法将得到优化,但我遇到了I/O问题。起初,我的加载过程很慢,但当文件被访问了几次后,速度会加快5倍左右。因此,我强烈怀疑,

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


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

只有一种方法可以将文件加载到文件系统缓存中:读取它。这是鸡和蛋的问题。通过使用读取文件的辅助线程,可以首先获取鸡蛋。对于下一个文件可能是什么,它必须有某种智能。不要读太多。

在POSIX系统上,您应该使用:

POSIX_FADV_需要

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


然而,这在Windows上似乎并不存在。有一些替代方法。

可能每一页只读取一个字节(4KB?)就足以读取和缓存整个页面。如果其他注释中列出的方法没有提高性能,我将尝试读取每个块的最小数量,谢谢。谢谢,这很有帮助。如果我最终使用它并注意到它实际上提高了性能,我将进行更新。