Windows 7 64 ビットで多数のイメージ ファイル (~10000 x 16 MB) への読み取り/書き込みアクセスを行うために、メモリ マップト ファイルを使用しています。私の目標は次のとおりです。
できるだけ多くのデータをキャッシュする。
新しいイメージを割り当てて、それらにできるだけ速く書き込むことができること。
したがって、メモリ マップ ファイルを使用してファイルにアクセスしています。キャッシュはうまく機能しますが、物理メモリがほとんどなくなるまで、OS はダーティ ページをフラッシュしません。そのため、物理メモリがいっぱいになると、新しいファイルの割り当てと書き込みが非常に遅くなります。
1 つの解決策は定期的に を使用することFlushViewOfFile()
ですが、この関数はデータがディスクに書き込まれるまで戻りません。
ファイル マッピングを非同期的にフラッシュする方法はありますか? 私が見つけた唯一の解決策は何度も繰り返すことですが、このアプローチを使用するUnmap()
とMapViewOfFile()
、同じデータポインターを再度取得することはできません。誰かがより良いアプローチを提案できますか?
WINAPI
編集:ドキュメントをもう少し読むと、私の問題に対する適切な解決策が見つかったようです:
VirtualUnlock()
ロックされていないメモリ範囲を呼び出すと、ダーティ ページがフラッシュされます。