Как асинхронно очистить файл с отображением памяти?

Я использую файлы с отображением памяти для чтения -/записи -доступа к большому количеству файлов изображений (~10000 x 16 МБ )под Windows 7 64bit. Мои цели:

  1. Кэшировать как можно больше данных.

  2. Возможность размещать новые изображения и записывать их как можно быстрее.

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

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

Есть ли способ асинхронно очистить сопоставление файлов? Единственное решение, которое я нашел, - это снова Unmap()и MapViewOfFile(), но, используя этот подход, я не могу быть уверен, что снова получу тот же указатель данных. Может ли кто-нибудь предложить лучший подход?

Изменить :Почитав документацию WINAPIподольше, кажется, я нашел подходящее решение своей проблемы:

Вызов VirtualUnlock()для незаблокированного диапазона памяти приводит к сбросу грязных страниц.

10
задан the swine 28 May 2014 в 21:37
поделиться