О Windows из первых рук: Никаких ограничений… вроде бы

Есть ли ограничение на число файлов в каталоге, с которыми может справиться проводник? Жестко заданного предела нет — все дело в наличии терпения.

Реймонд Чен

Не один клиент интересовался, какое максимально допустимое число файлов может быть в каталоге, чтобы с ним все еще можно было работать в Проводнике (Explorer ). Правда в том, что нет никакого предела числу элементов в папке. Единственное ограничение — адресное пространство и ваше терпение.

Прежде чем показать что-либо в окне, ОС Windows XP должна была считать и отсортировать все элементы в папке. В объемной папке это приводило к задержкам отображения результата. На экране долго ничего нет, а потом — бах! — и все появилось. Windows Vista и Windows 7 загружают содержимое в окно постепенно, что и хорошо, и плохо.

Хорошо — потому что загруженное содержимое видно сразу, а плохо из-за того, что в процессе просмотра оно может меняться.

Загрузка…

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

Одна из неприятных ситуаций в больших папках — выход за пределы адресного пространства. Тогда возможны очень неприятные ошибки. Из-за недостатка адресного пространства может нарушаться работа механизма безопасности, и он по умолчанию будет закрывать доступ. Увидев ошибку доступа, вы наверняка будете удивляться: «Как так — у меня ведь должен быть доступ?!» Впрочем через минуту-другую все может вернуться к норме и доступ вы получите.

Иногда нам задают такие вовросы: «В одной из наших папок 1,8 млн файлов, и мы заметили, что при открытии этой папки использование процессом Проводника процессорного времени возрастает до 50 %. Реакция интерфейса сохраняется. Мы можем просматривать результаты, но иногда бывают перебои».

На такое я отвечаю следующее: «Вы далеко вышли за пределы нормальной работы Проводника». Если вы требуете от Проводника обрабатывать 1,8 млн элементов, практически невозможно избежать серьезной нагрузки на процессор и память. Перечисление такого большого числа элементов требует времени, особенно если нужно выделять память для отслеживания всех перечисленных 1,8 млн элементов.

Другой клиент сообщил, что выполнение команды «dir /s» для всего диска занимает неделю. Команде dir даже не нужно сохранять результаты. Она просто выводит их на экран и отбрасывает информацию, не сохраняя. Возможно когда-нибудь команда dir /s «догадается», что ее результаты отбрасываются, и перейдет к последнему каталогу и покажет 50 последних файлов.

Вообще говоря, сама по себе файловая система NTFS может работать с огромным количеством файлов. Проблема в программах, которые часто пытаются работать со списками этих файлов. Если у вас миллионы файлов, скорее всего Проводник не самое лучшее средство работы с ними. Нужно использовать приложение, которое специализируется на управлении большими количествами файлов, у некоторых из таких приложений имена не совсем соответствуют назначению, например Document Management System.

После такого объяснения клиент поинтересовался: «Удастся ли нам улучшить производительность, если присвоить единицу параметрам NtfsDisableLastAccessUpdate и NtfsDisable8dot3NameCreation в реестре?” По вопросу ясно, что клиент ничегошеньки не понял из объяснений.

Обновляет ли NTFS дату последнего доступа к файлу или поддерживает ли короткие имена файлов — это никак не меняет того факта, что у вас 1,8 млн записей. Если вы хотите, чтобы Проводник перечислил и выделил память для отслеживания такого большого количества файлов, придется подождать.

Раймонд Чен

Раймонд Чен (Raymond Chen)— его веб-сайт и одноименная книга «Old New Thing», вышедшая в издательстве Addison-Wesley в 2007 году, рассказывает об истории Windows, программировании с использованием интерфейса Win32 и воровстве компьютерных мышек.