2011-05-01 13 views
1

WindowsにはFILE_FLAG_NO_BUFFERINGフラグがあり、ファイルシステムによってI/Oをキャッシュするかどうかを指定できます。キャッシュからファイルを読み取る(ただしWindowsでは)

これは問題ありませんが、もし私がにしたいのであれば、可能であればキャッシュを使用しますが、変更しないでください。

つまり、Windowsに次のように伝えますか?

がすでにキャッシュされていた場合、キャッシュからこのファイルを読んで、私のデータは、局所性を示さないので、はキャッシュに入れないでください!

SCSI規格では、正確にこれを行いDisable Page Outビットを定義するので、私はどのように(すべてであれば)、あまりにもファイル・システム・キャッシュの協力を得て(Windowsからのこの機能を使用することが可能であり、当然のを思ったんだけど)?


編集:TL; DR:

ためFILE_FLAG_WRITE_THROUGHの相当読み込みは何ですか?

+0

明確にするために、可能であればキャッシュを使用して読み込みたいが、読み込み結果をキャッシュしたくない場合(おそらくより有用なデータの先取りを避けるため) –

+0

@Phil:まったく=) – Mehrdad

+0

@Heandel:@Philは、他の*データが必要ないときにキャッシュから追い出されないようにすることを目的としています。 – Mehrdad

答えて

0

私は疑いあなたが求めているもののように見える二つのフラグを参照してください。前者の文書は完全に不透明ですが、あなたが望むものを暗示しているようです。パターンがランダムな場合は、後で再利用できるようにページにぶら下げておくとメモリが浪費されます。

ファイルの場合、Windowsカーネルは常にI/Oを保持するために 'キャッシュ'の一部のページを使用します。それはそれを置くことがどこにもありません。したがって、「他のページを撤回する前にこのファイルの古いページを取り除く」とは対照的に、「キャッシュしない」と言っても意味がありません。

+0

これは、私が求めていることはまったく行いません。前者は、先読みが推奨されておらず、後者は推奨されていると指定していますが、キャッシュからページを取り除くことについては何も言及していません。 – Mehrdad

+0

あなたのケースを最適化すると言われています。彼らは、彼らがあなたの記憶を欲しいと言っているとは言わず、彼らはあまり言わないとは言いません。カーネル開発者からのコメントがなければ、私はあなたの問題があれば実験します。 – bmargulies

+0

私は実際にそれを試しました - 問題はそれがキャッシュから他のページを引き出すことです(それで私のハードディスクは私が別のプログラムを実行するとそんなに嫌がられます)。一方、 'FILE_NO_INTERMEDIATE_BUFFERING'は他のプログラムに影響しません。すべて。もちろん、後者はキャッシュをまったく使用しないため、私の問題です。 – Mehrdad

1

あなたが求めているものに最も近いものは、FILE_FLAG_WRITE_THROUGHです。

FILE_FLAG_RANDOM_ACCESS 
FILE_FLAG_SEQUENTIAL_SCAN 

後でのdocは明らかにそれはおそらく先読みでしょうが順番に、それは、キャッシュ内のページを保持しないことを示唆している:

+0

私は読み込みについて尋ねたが、... – Mehrdad

+0

@Mehrdadを書き込みません:はい - 私はそれはそれはあなたが望むものを本当にだと、それが提供する最も近いではないと述べた理由です。 –