日常使用中,有些用户喜欢把电脑桌面背景设成纯色,比如经典的蓝绿色。不仅看着清爽,还方便快速找到桌面上的文件,久而久之也成了一种“视觉上的舒适区”。 但奇怪的是,微软曾在一篇官方支持文档中提到:在 Windows 7 或 Windows Server 2008 R2 中,如果你把背景设为纯色,登录时的欢迎界面可能会卡住长达 30 秒。这让很多人感到疑惑:不是简化了背景,系统应该更快才对,怎么反而更慢了? 对此,微软工程师 Raymond Chen 最近写文解释了当初这个“反常现象”的真正原因。 原来,Windows 登录流程背后有一套等候机制。当你在电脑上输入密码登录后,Windows 其实还在后台忙着把桌面“摆好”。它要先生成任务栏、加载各种系统服务、把桌面窗口准备好、图标一个个放上去,再把桌面背景图加载出来并显示在屏幕上。 系统不会马上让你看到桌面,它会等这些“环节”都汇报“我准备好了”。只有所有组件都说“OK”了,或者最多等上 30 秒,Windows 才会从欢迎界面切换到桌面。 所以,这个 30 秒的等待,其实就是在等某个组件回应。如果哪个环节没告诉系统“我准备好了”,那系统就只能干等,最多等 30 秒才强行跳过。原本的逻辑大致如下:
这个问题其实是因为代码写得有点“死”。系统在加载桌面背景图时,本来有一段代码会告诉系统:“我这边准备好了!”——但是这段“报平安”的代码,藏在加载图片的那段程序里。也就是说,如果你没设背景图(比如用了纯色背景),那这段代码就根本不会运行,系统就一直会等,等一个永远不会到的“我准备好了”的信号。 类似的问题也出现在了“隐藏桌面图标”的组策略功能中,即如果你打开了“隐藏桌面图标”的策略,也可能遇到一样的 30 秒卡欢迎界面的问题。 这类问题容易出现,是因为“组策略”这种功能,往往是开发后期才加进去的。程序员加这种功能的方式,通常就是:找到原来的功能代码,然后在外面套一层“如果策略允许,就执行”。结果一不小心,就把“告诉系统我准备好了”这句也套进了条件里——于是当策略禁用这个功能时,通知也跟着没了,系统又在那白等。
问题是,这样一来,如果策略禁止显示桌面图标,“准备就绪”的信号也不会发出,系统同样会在欢迎界面上干等 30 秒。 需要注意的是,登录本身并没有真的慢了 30 秒,而是由于系统在等待无果,欢迎界面显示时间被拉满了。 幸运的是,从支持页面文章时间戳来看,这个问题在 2009 年 11 月就被修复了——也就是 Windows 7 正式发布几个月后,现在不会有这样的问题。 |