Поиск в Windows

Одним из основных пожеланий пользователей, выражаемых в отзывах, является возможность отключения некоторых служб и установки опциональных компонентов – мы уже говорили об этом в предыдущих статьях. Ключевым фактором этого желания является представление пользователей о производительности и потреблении ресурсов различными компонентами системы. Цель Windows – обеспечить надежную и совместимую платформу для разработчиков, в которой они могут использовать различные доступные службы и функции, от которых в конечном счете выигрывают обычные пользователи. В то же самое время мы должны эффективно использовать системные ресурсы, настолько эффективно, чтобы конечный результат перевешивал издержки. Мы понимаем, что некоторые количество наших пользователей считают, что это уравнение можно решить лишь вручную. Это тоже самое, что думать будто автомобиль в принципе не может считаться мощным без ручной коробки передач.

В сегодняшней статье речь пойдет о механизме поиска с точки зрения его доступности как компонента платформы, а также с точки зрения его преимуществ для конечных пользователей. Поговорим и о том, на какие уступки, приходится идти в разработке, а также затронем вопрос методик, используемых для создания поискового механизма. Посему рад представить вам Криса Макконнелла ( ChrisMcConnell ), ведущего инженера по разработке программного обеспечения в команде FindandOrganize . -- Стив.

Есть ли среди вас те, кто искренне считает, что причиной непрерывного мигания лампочки доступа к жесткому диску является индексирование? Считаете ли вы, что индексирование приводит к зависанию ваших игр? Если так, то эта статья именно для вас! Разработкой службы индексирования, которую далее мы будем называть индексатором, занимается команда Find and Organize. Одной из распространенных жалоб, которые мы постоянно слышим от опытных пользователей Vista, является желание отключить индексатор, поскольку, по их мнению, он потребляет львиную долю системных ресурсов, практически не предлагая ничего взамен. По нашим данным около 1,5% пользователей Vista отключают индексатор по причине этого заблуждения.

Цель данной статьи – уточнить роль индексатора и рассказать о работе, которая была проведена для обеспечения разумного потребления им ресурсов. Давайте начнем с функций индексатора – для чего он нужен и почему не следует его отключать?

Почему именно индексация?

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

Несмотря на то, что технологии индексирования берут свое начало во времена ранних версий Windows, лишь с выходом Windows Vista компании Microsoft удалось вывести эту функциональность в главное русло. До Vista поиск носил рудиментарный характер, поскольку осуществлять его можно было по простым свойствам файла – имени, дате создания и размеру. В Windows можно было осуществлять более сложный поиск по содержимому файла, но эта функций не получила широкого распространения. Поиск имел базовые функции – все файлы с точки зрения его механизма были одинаковы, потому что алгоритм поиска не понимал и не использовал метаданные из файлов.

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

Уступки, на которые приходится идти

Многие поисковые механизмы последовательно читают все файлы чтобы найти совпадения. В данном случае приходится терять время, ожидая результатов поиска. Чем больше файлов на компьютере, тем дольше придется ждать. Если в будущем вновь понадобиться поискать по тому же самому слову, снова придется ждать. В Windows Vista идексатор пытается прочитать все файлы до того, как вы захотите произвести поиск. Для этого ему необходимо всего лишь однажды просканировать все файлы, а не делать это каждый раз, когда понадобится провести поиск. Если файл изменится, индексатор получит уведомление и ему придется заново перечитать файл. При чтении файла индексатор извлекает значимую информацию из него, чтобы в будущем обеспечить возможность более интеллектуального поиска и представления информации. Сложность состоит в том, чтобы выполнить эту операцию максимально быстро, чтобы индекс был в актуальном состоянии. При этом создание индекса не должно сказываться на производительности системы.

Неотъемлемый элемент Windows

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

Это важно не только для отдельных компонентов (в частности Windows Search), но и самой платформы Windows. Существует масса приложений, которым требуется осуществлять поиск по содержимому файла на компьютере. Только представьте, если бы каждое из них сопровождалось собственной версией индексатора! Только подумайте, сколько лишней работы выполнял бы ваш компьютер! Каждый раз при сохранении файла заданного типа все индексаторы отчаянно стремились бы проиндексировать новый файл. С целью избавить пользователя от ненужных нагрузок на его компьютер и был создан индексатор, позволяющий индексировать файлы различных типов. Кроме того, нами были выпущены API, позволяющие разработчикам настраивать индексатор под свои нужды. В целом индексатор знаком с двумястами распространенными типами файлов и умеет каталогизировать около четырехсот различных свойств файлов. В любой момент времени можно добавить поддержку новых приложений, новых типов файлов и свойств. Существует возможность добавить поддержку индексирования других типов данных, например, сообщений электронной почты. На сегодняшний день индексирование активно применяется в следующих приложениях: Microsoft Office Outlook и OneNote, Lotus Notes, Windows Live Photo Gallery, Internet Explorer 8 и Google Desktop Search. Еще одним примером удачного использования индексатора является индексация компонентами Tablet PC рукописных надписей, позволяющая в значительной степени улучшить систему распознавания рукописного ввода.

Постоянная оптимизация

Мы постоянно работаем над тем, чтобы увеличить производительность индексатора и его надежность. В состав Windows Vista включена третья версия Windows Search. Среди основных отличий этой версии:

  • Индексатор работает в качестве системной службы, а не процесса, запущенного от имени пользователя. Это минимизирует влияние на потребление системных ресурсов при работе нескольких пользователей, а также приводит к сокращению размеров каталога и предотвращает переиндексацию.
  • Индексатор использует метод низкоприоритетного ввода-вывода, позволяющего минимизировать влияние индексирования на отзывчивость компьютера. До выхода Windows Vista все процедуры I/O рассматривались равнозначно.

Не так давно мы выпустили Windows Search v4, доступный в качестве обновления пользователям Windows XP и Vista и значительно более совершенный в смысле производительности и надежности:

  • Значительно усовершенствована обработка запросов, сортировка, фильтрация и группировка. Например, изменения в Vista включают:
    1. Скорость обработки типичного запроса увеличена на 38%
    2. Нагрузка на CPU сокращена на 80%
    3. Потребление памяти снижено на 20%
  • Нагрузка на серверы Exchange сокращена на 95% при работе Outlook в режиме онлайн. В предыдущих версиях Windows Search большое количество клиентов Outlook, запущенных в онлайн-режиме, могли привести к зависанию сервера Exchange.
  • Среди изменений, повышающих надежность, следует отметить:
    1. Огромное количество исправлений, призванных устранить ошибки, о которых сообщали пользователи и которые приводили к остановке службы индексирования.
    2. Добавлена защита от повреждения индекса. При обнаружении повреждений каталога он автоматически восстанавливается.
    3. Добавлена функция регистрации событий, призванная помочь отследить и исправить проблемы в работе индексатора.

Что касается Windows 7, которую вы вскоре увидите на PDC, то мы проделали огромную работу по увеличению производительности и надежности индексатора. Если вы все еще думаете, что индексатор не может принести ничего, кроме проблем, рекомендуем вам проделать следующее:

  • Загрузить и установить Windows Search 4 (в Vista или XP).
  • Загрузить и установить Indexer Gadget из Windows Live Gadget Gallery (только для Vista). Этот гаджет, созданный одним из членов нашей команды, позволяет наблюдать за количеством проиндексированных файлов. Кроме того, гаджет позволяет приостанавливать процесс индексирования или принудительно включать его.
  • Если вы относитесь к тем, кто любит заглянуть под капот автомобиля, можно воспользоваться утилитой Windows Task Manager и/или Resource Monitor для мониторинга процессов SearchIndexer, SearchFilterHost и SearchProtocolHost.

Если вы считаете, что ваша система недостаточно быстра и отзывчива, и вините в этом индексатор, понаблюдайте за значениями на гаджете во время работы за компьютером. Проверьте, меняются ли выводимые значения в тот момент, когда вы испытываете трудности. Становится ли система более отзывчивой, если приостановить процедуру индексирования? Как мы уже неоднократно сообщали, мы всегда стараемся сделать удобство поиска в Windows максимальным, поэтому если при использовании поискового механизма вы испытываете какие-либо трудности, мы хотим знать о них. Направляйте ваши отзывы по адресу idx-help@microsoft.com.

Крис МакКоннелл (Chris McConnell),

ведущий инженер в команде Find and Organize