Поделиться через


Закрытие объекта сопоставления файлов

После завершения процесса с объектом сопоставления файлов он должен уничтожить все представления файлов в своем адресном пространстве с помощью функции UnmapViewOfFile для каждого представления файлов.

Распакование сопоставленного представления файла делает недействительным диапазон, занимаемый представлением в адресном пространстве процесса, и делает диапазон доступным для других выделений. Он удаляет запись рабочего набора для каждой несопоставленной виртуальной страницы, которая была частью рабочего набора процесса, и уменьшает размер рабочего набора процесса. Он также уменьшает количество общих общей папки соответствующей физической страницы.

Измененные страницы в несопоставленном представлении не записываются на диск до тех пор, пока их количество общих файлов не достигнет нуля, или, другими словами, пока они не будут не сопоставлены или обрезаны из рабочих наборов всех процессов, которые совместно используют страницы. Даже в этом случае измененные страницы записываются "лениво" на диск; то есть изменения могут кэшироваться в памяти и записываться на диск позже. Чтобы свести к минимуму риск потери данных в случае сбоя питания или сбоя системы, приложения должны явно очистить измененные страницы с помощью функции FlushViewOfFile .

После завершения каждого процесса с использованием объекта сопоставления файлов и отмены сопоставления всех представлений он должен закрыть дескриптор объекта сопоставления файлов и файл на диске, вызвав CloseHandle. Эти вызовы CloseHandle завершаются успешно, даже если есть открытые представления файлов. Однако оставление сопоставленных представлений файлов приводит к утечке памяти.