Преимущественное получение файлов в кеш страниц Windows - PullRequest
3 голосов
/ 19 января 2010

У меня есть программа, написанная на C, которая позволяет пользователю просматривать около миллиарда маленьких файлов. Каждый файл должен пройти определенный объем обработки (только для чтения), прежде чем он будет отображаться для пользователя. Я реализовал буфер, который предварительно обрабатывает файлы в определенном радиусе вокруг позиции пользователя, поэтому, если они работают линейно через них, нет большой задержки. По разным причинам я могу фактически запускать свой алгоритм обработки только для одного файла за раз (хотя у меня может быть открыто несколько файлов и я могу читать из них), поэтому мой буфер загружается последовательно. Мои алгоритмы обработки так же оптимизированы, как и собираются, но я сталкиваюсь с проблемами ввода-вывода. Сначала процесс загрузки идет медленно, но когда к файлам обращались несколько раз, он ускоряется примерно в 5 раз. Поэтому я сильно подозреваю, что меня тормозит ожидание, когда кеш страниц Windows загрузит мои файлы в память. Я очень мало знаю о таких вещах. Если бы я мог убедиться, что мои файлы были в кеше до того, как они понадобились моему алгоритму обработки, я был бы в деле.

У меня такой вопрос: есть ли способ убедить / задобрить / обмануть / запугать Windows загрузкой моих файлов в кеш страниц, прежде чем я действительно начну читать / обрабатывать их?

Ответы [ 2 ]

1 голос
/ 19 января 2010

В системе POSIX вы будете использовать posix_fadvise :

POSIX_FADV_WILLNEED

Указывает, что приложение ожидает доступа к указанным данным в ближайшем будущем.

Однако этого, похоже, не существует в Windows. Что такое эквивалент fadvise / madvise для windows? - Переполнение стека имеет несколько альтернатив.

1 голос
/ 19 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...