为什么 Windows 7 设置纯色背景后,登录速度会变慢几个月?
我个人喜欢使用纯色背景。这是 Windows 95 的默认设置¹,我一直坚持使用那种蓝绿色的背景色。这有点像我的舒适食品。
当有人向我指出一篇支持文章,题为“在 Windows 7 或 Windows Server 2008 R2 中将桌面背景设置为纯色后,登录过程中欢迎屏幕可能会显示 30 秒”时,我感到非常惊讶。为什么使用纯色背景会使登录速度变慢?
在您的登录验证通过后,Windows 会设置您的桌面。这个过程有很多事情在进行。任务栏被创建,负责各种系统服务的组件被加载和初始化,桌面窗口被创建并填充图标,桌面背景窗口加载桌面壁纸并将其绘制到屏幕上。
登录系统会等待所有这些组件报告它们已准备就绪,当收到所有组件的“一切就绪”信号时,或者当 30 秒过去时,登录系统会切换离开欢迎屏幕。
考虑到这种设计,您可以想象 30 秒延迟的原因:这意味着其中一个组件未能报告。也许它的代码是这样写的:
InitializeWallpaper()
{
if (wallpaper bitmap defined)
{
LoadWallpaperBitmap();
}
}
LoadWallpaperBitmap()
{
locate the bitmap on disk
load it into memory
paint it on screen
Report(WallpaperReady);
}
报告壁纸已准备就绪的代码位于壁纸位图代码中,这意味着如果您没有壁纸位图,则永远不会发出报告,并且登录系统将徒劳地等待永远不会到来的报告。
文章后面提到了一篇相关文章,指出如果启用了“隐藏桌面图标”组策略,您也可能会遇到 30 秒的延迟。
组策略很容易出现这个问题,因为它们通常是在主代码编写完成后才添加的。当您必须添加组策略时,您会找到执行该操作的代码,并在其周围放置一个巨大的“if policy allows”。
// Original code
InitializeDesktopIcons()
{
bind to the desktop folder
enumerate the icons
add them to the screen
Report(DesktopIconsReady);
}
// Updated with group policy support
InitializeDesktopIcons()
{
if (desktop icons allowed by policy)
{
bind to the desktop folder
enumerate the icons
add them to the screen
Report(DesktopIconsReady);
}
}
糟糕,“if”块的范围超出了报告调用的范围,因此如果启用了该策略,则永远不会报告图标已准备就绪,并且登录系统将在欢迎屏幕上停留整整 30 秒。
请注意,在这两种情况下,并不是登录时间延长了 30 秒。而是欢迎屏幕保持显示整整 30 秒,而不是所有系统报告准备就绪的实际时间(这可能是 5 秒,也可能是 25 秒,具体取决于您的系统性能)。
如果您查看文章的时间戳,您会发现该问题已于 2009 年 11 月修复,就在 Windows 7 于 2009 年 7 月发布几个月后。
¹ 最初,我避免使用位图背景,因为它们会占用大量内存,而且当您只有 4 或 8 兆字节的内存时,仅为壁纸占用四分之三兆字节的内存并不是一项好的投资。
此外,我倾向于坚持使用默认配置,因为它使错误报告更容易。如果重现说明是“从头开始安装系统,然后执行这些步骤”,您更有可能获得关注,而不是如果您说“从头开始安装系统,将这 50 个设置从其默认值更改,然后执行这些其他步骤。”更容易证明影响默认配置的错误修复是合理的,而不是需要用户更改默认设置的错误修复,特别是如果这些设置很模糊。