从缓存中读取文件,但不会破坏缓存(在Windows中)

时间:2011-05-01 21:32:23

标签: winapi caching file-io

Windows有一个FILE_FLAG_NO_BUFFERING标志,允许您指定是否希望文件系统缓存您的I / O.

没关系,但是如果可能的话,我想使用缓存,但是避免修改呢?

换句话说,您如何告诉Windows以下内容?

  

如果缓存已经缓存,请从缓存中读取此文件,但我的数据不会显示位置,因此不要将其放入缓存

SCSI标准定义了一个Disable Page Out位,正是这样做的,所以我想知道如何(如果有的话)可以从Windows使用该功能(与文件系统缓存的合作,也是如此)当然)?


编辑:TL; DR:

读取FILE_FLAG_WRITE_THROUGH相当于什么?

2 个答案:

答案 0 :(得分:1)

关于最近的Windows提供的内容是FILE_FLAG_WRITE_THROUGH

答案 1 :(得分:0)

我看到两个看起来像你要求的标志:

FILE_FLAG_RANDOM_ACCESS
FILE_FLAG_SEQUENTIAL_SCAN

后者的文档清楚地表明它不会在缓存中保留页面,尽管它可能会顺序读取。前者的文档是完全不透明的,但似乎暗示了你想要的东西。如果模式非常随机,挂在页面上以供以后重用将浪费内存。

请记住,对于文件,Windows内核总是会使用一些“缓存”页面来保存I / O.它无处可去。所以说“不要缓存它”是没有意义的,而不是“在逐出其他页面之前逐出该文件的旧页面。”