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