Я использую файлы с отображением памяти, чтобы иметь доступ для чтения/записи к большому количеству файлов изображений (~ 10000 x 16 МБ) под 64-разрядной версией Windows 7. Мои цели:
Кэшировать как можно больше данных.
Возможность размещать новые изображения и записывать их как можно быстрее.
Поэтому я использую файлы с отображением памяти для доступа к файлам. Кэширование работает хорошо, но ОС не сбрасывает грязные страницы до тех пор, пока у меня почти не закончится физическая память. Из-за этого выделение и запись в новые файлы происходит довольно медленно после заполнения физической памяти.
Одним из решений было бы регулярное использование FlushViewOfFile()
, но эта функция не возвращает значение до тех пор, пока данные не будут записаны на диск.
Есть ли способ асинхронно очистить сопоставление файлов? Единственное решение, которое я нашел, - это снова Unmap()
и MapViewOfFile()
, но, используя этот подход, я не могу быть уверен, что снова получу тот же указатель данных. Может ли кто-нибудь предложить лучший подход?
Редактировать: Читая документацию WINAPI
немного дольше, кажется, я нашел подходящее решение моей проблемы:
Вызов VirtualUnlock()
для незаблокированного диапазона памяти приводит к сбросу грязных страниц.