Как стать автором
Обновить

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

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров12K
Автор оригинала: Raymond Chen

Лично у меня установлен одноцветный фон. Он был стандартным в 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 мегабайтов памяти, отдавать три четверти мегабайта просто под обои неразумно.

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

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+55
Комментарии9

Публикации

Работа

Ближайшие события