ファイル マッピング オブジェクトを閉じる

ファイル マッピング オブジェクトの処理が完了したら、各ファイル ビューに UnmapViewOfFile 関数を使用して、アドレス空間内のすべてのファイル ビューを破棄する必要があります。

ファイルのマップされたビューのマップを解除すると、プロセスのアドレス空間内のビューによって占有されている範囲が無効になり、その範囲が他の割り当てで使用できるようになります。 これにより、プロセスのワーキング セットの一部であったマップされていない各仮想ページのワーキング セット エントリが削除され、プロセスのワーキング セット サイズが縮小されます。 また、対応する物理ページの共有数もデクリメントします。

マップされていないビューの変更されたページは、共有数が 0 に達するまでディスクに書き込まれません。つまり、ページを共有するすべてのプロセスのワーキング セットからマップ解除またはトリミングされるまでは、ディスクに書き込まれません。 それでも、変更されたページはディスクに "遅延" して書き込まれます。つまり、変更はメモリにキャッシュされ、後でディスクに書き込まれる可能性があります。 電源障害やシステム クラッシュが発生した場合にデータが失われるリスクを最小限に抑えるには、 アプリケーションで FlushViewOfFile 関数を使用して変更されたページを明示的にフラッシュする必要があります。

各プロセスでファイル マッピング オブジェクトの使用が完了し、すべてのビューがマップ解除されたら、 CloseHandle を呼び出して、ファイル マッピング オブジェクトのハンドルとディスク上のファイルを閉じる必要があります。 これらの CloseHandle の呼び出しは、まだ開いているファイル ビューがある場合でも成功します。 ただし、ファイル ビューをマップしたままにすると、メモリ リークが発生します。