Какой кэш ускоряет поиск файлов во второй раз?

В Windows на разделе жесткого диска с Total Commander, если я делаю поиск файлов в корне файловой системы, например C:\, это займет значительное время: он будет отображаться по мере обхода всей структуры каталогов (по-видимому, в глубину).

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

Я предполагаю, что не Total Commander кэширует структуру каталогов, или это так? Мне кажется, что это особенность ОС или кеш жесткого диска.

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

2 ответа

Я предполагаю, что не Total Commander кэширует структуру каталогов, или это так?

Возможно нет. Если у вас есть большое количество файлов, вы можете увидеть тот же эффект, если откроете командную строку и введите что-то вроде dir c:\abc.def /s Скорее всего, у вас нет файлов с таким именем, но для завершения в первый раз требуется гораздо больше времени, чем для запуска его во второй раз сразу после этого.

Мне кажется, что это особенность ОС или кеш жесткого диска. Где и как именно он тогда кешируется? (т.е. каким компонентом, каким механизмом, какой структурой?)

Windows / NTFS будет кэшировать элементы, а также будет кэш в контроллере вашего жесткого диска.

Как система узнает, что кэш обновлен или нет?

Потому что единственный способ записи на жесткий диск - использование подпрограмм, которые знают и, следовательно, обновляют или аннулируют кэш. Для окон подпрограммы, вероятно, являются драйвером устройства NTFS, тогда как для жесткого диска это контроллер диска.

Если он может быть полностью кэширован, то почему он не кэшируется по умолчанию?

Потому что кеш лучше использовать для других вещей. Кэшировать это по умолчанию будет означать

  1. Каждый раз, когда компьютер запускается, он должен будет читать и хранить информацию о каждом файле на вашем жестком диске независимо от того, нужен ли он ему. Это может добавить несколько секунд к вашему времени запуска. Люди также часто имеют миллионы файлов, что означает, что времени может быть значительно больше.

  2. Эта память недоступна для кэширования чего-либо еще, особенно файлов, над которыми вы действительно работаете.

  3. Что произойдет, если ваш профиль / документы хранятся на сервере. Вы хотите, чтобы система ждала, пока она извлечет информацию обо всех ваших файлах по сети?

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

То, на что вы ссылаетесь, называется индексацией. Большинство поисковых запросов имеют индекс, который создается с течением времени для ускорения поиска. Пуск -> Поиск имеет индекс, TotalCommander, кажется, использует свой собственный, Google имеет один для всех веб-страниц, которые вы можете найти через Google.

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

Другие вопросы по тегам