9

Windows 7 64 ビットで多数のイメージ ファイル (~10000 x 16 MB) への読み取り/書き込みアクセスを行うために、メモリ マップト ファイルを使用しています。私の目標は次のとおりです。

  1. できるだけ多くのデータをキャッシュする。

  2. 新しいイメージを割り当てて、それらにできるだけ速く書き込むことができること。

したがって、メモリ マップ ファイルを使用してファイルにアクセスしています。キャッシュはうまく機能しますが、物理メモリがほとんどなくなるまで、OS はダーティ ページをフラッシュしません。そのため、物理メモリがいっぱいになると、新しいファイルの割り当てと書き込みが非常に遅くなります。

1 つの解決策は定期的に を使用することFlushViewOfFile()ですが、この関数はデータがディスクに書き込まれるまで戻りません。

ファイル マッピングを非同期的にフラッシュする方法はありますか? 私が見つけた唯一の解決策は何度も繰り返すことですが、このアプローチを使用するUnmap()MapViewOfFile()、同じデータポインターを再度取得することはできません。誰かがより良いアプローチを提案できますか?

WINAPI編集:ドキュメントをもう少し読むと、私の問題に対する適切な解決策が見つかったようです:

VirtualUnlock()ロックされていないメモリ範囲を呼び出すと、ダーティ ページがフラッシュされます。

4

1 に答える 1