Почему Windows 7 долго входила в систему с одноцветным фоном рабочего стола?

от автора

Лично у меня установлен одноцветный фон. Он был стандартным в Windows 951, и с тех пор я не расстаюсь с этим голубовато-зелёным цветом. Он меня успокаивает.

Поэтому представьте моё удивление, когда мне показали статью техподдержки «Экран Welcome может отображаться в течение 30 секунд в процессе входа, если вы установили одноцветный фон в Windows 7 или в Windows Server 2008 R2». Почему вход выполняется медленнее с одноцветным фоном?

После аутентификации входа Windows приступает к подготовке рабочего стола. При этом выполняется множество разных процессов: создаётся панель задач, загружаются и инициализируются компоненты, отвечающие за различные системные сервисы, создаётся и заполняется значками окно рабочего стола, окно фона рабочего стола загружает обои рабочего стола и выводит их на экран.

Система входа дожидается, пока все эти элементы сообщат о своей готовности или пройдёт 30 секунд, после чего она переключается с экрана Welcome.

Из этой схемы можно понять причину 30-секундной задержки: она означает, что одному из элементов не удалось сообщить о своей готовности. Допустим, код выглядит примерно так:

InitializeWallpaper() {     if (картинка обоев задана)     {         LoadWallpaperBitmap();     } }  LoadWallpaperBitmap() {     находим картинку на диске     загружаем её в память     выводим её на экран     Report(WallpaperReady); }

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

В той же статье есть упоминание другой статьи, в которой говорится, что если включена групповая политика «Скрывать значки рабочего стола», то тоже может возникнуть 30-секундная задержка.

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

// Первоначальный код InitializeDesktopIcons() {     ограничиваемся папкой рабочего стола     создаём список значков     добавляем их на экран     Report(DesktopIconsReady); }  // Дополненный поддержкой групповой политики  InitializeDesktopIcons() {     if (значки рабочего стола разрешены политикой)     {                                            ограничиваемся папкой рабочего стола         создаём список значков         добавляем их на экран         Report(DesktopIconsReady);     }                                    }

Область видимости блока if вышла за рамки вызова отчёта, сообщение о готовности не отправляется и система входа остаётся на экране Welcome все 30 секунд.

Стоит отметить, что в обоих случаях не процесс входа растягивается на 30 секунд. Экран Welcome просто продолжает отображаться — это не время, в течение которого все системы сообщают о готовности (в зависимости от производительности конкретной системы это может быть и 5 секунд, и 25 секунд).

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

1 Изначально я не пользовался фонами-картинками, потому что они занимали много памяти, а когда у тебя только 4 или 8 мегабайтов памяти, отдавать три четверти мегабайта просто под обои неразумно.

Кроме того, я стараюсь придерживаться конфигураций по умолчанию, потому что это упрощает создание отчётов о багах. Если в инструкциях по воспроизведению бага написано «установите систему с нуля, а затем выполните такие-то шаги», то он будет устранён с гораздо большей вероятностью, чем баг с инструкцией «установите систему с нуля, измените пятьдесят параметров, а затем выполните такие-то дополнительные шаги». Гораздо проще оправдать устранение бага, влияющего на стандартную конфигурацию, чем того, для возникновения которого нужно, чтобы пользователь изменил параметры с используемых по умолчанию, особенно если эти параметры непрозрачны.


ссылка на оригинал статьи https://habr.com/ru/articles/905360/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *