Тормозят Memory Mapped файлы при первом доступе

Тема в разделе "WASM.WIN32", создана пользователем alterego, 8 янв 2007.

  1. alterego

    alterego New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2005
    Сообщения:
    44
    Адрес:
    Russia
    Уважаемые!
    Проблема вот в чем. Допустим, имеется 150 мегов в 50 файлах. Нужен быстрый доступ к любому месту в этих файлах. При необходимости программа их мапирует и сразу отпускает. При первом доступе к определенному месту в файле (если программу давно не запускали) программа тормозит, а при последующих все летает. Ничего умнее, чем тупо “пройтись” по файлам во время загрузки, я пока не придумал. Существует ли какое-нибудь “официальное” решение этой проблемы?
     
  2. eugene_

    eugene_ New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2005
    Сообщения:
    93
    Адрес:
    Russia
    Надо понимать суть обращения к mapped files - это не что иное как обращение к тем же дисковым файлам, но не через IO API, а используя буферы CacheManager'а.
    Таким образом, пока файл не будет прочитан физически с диска, доступа к нему, что становится вполне понятным, не будет - а следовательно пройдет время (именно при первом доступе). Запись аналогичным образом происходит (тестировал как-то файлы по 1 гигу с помощью mapped file - процесс вызова MapViewOfFile затягивался на довольно большое время, равно как и сохранение). Но конечно побыстрее, чем через user defined buffers & IO API (теряется время перемещения из кеша в user defined buffer).
     
  3. alterego

    alterego New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2005
    Сообщения:
    44
    Адрес:
    Russia
    Короче, я правильно делал. Другого способа похоже нет.