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