Уважаемые! Проблема вот в чем. Допустим, имеется 150 мегов в 50 файлах. Нужен быстрый доступ к любому месту в этих файлах. При необходимости программа их мапирует и сразу отпускает. При первом доступе к определенному месту в файле (если программу давно не запускали) программа тормозит, а при последующих все летает. Ничего умнее, чем тупо “пройтись” по файлам во время загрузки, я пока не придумал. Существует ли какое-нибудь “официальное” решение этой проблемы?
Надо понимать суть обращения к mapped files - это не что иное как обращение к тем же дисковым файлам, но не через IO API, а используя буферы CacheManager'а. Таким образом, пока файл не будет прочитан физически с диска, доступа к нему, что становится вполне понятным, не будет - а следовательно пройдет время (именно при первом доступе). Запись аналогичным образом происходит (тестировал как-то файлы по 1 гигу с помощью mapped file - процесс вызова MapViewOfFile затягивался на довольно большое время, равно как и сохранение). Но конечно побыстрее, чем через user defined buffers & IO API (теряется время перемещения из кеша в user defined buffer).