编译 | 苏宓
出品 | CSDN(ID:CSDNnews)
日常使用中,有些用户喜欢把电脑桌面背景设成纯色,比如经典的蓝绿色。不仅看着清爽,还方便快速找到桌面上的文件,久而久之也成了一种“视觉上的舒适区”。
但奇怪的是,微软曾在一篇官方支持文档中提到:在 Windows 7 或 Windows Server 2008 R2 中,如果你把背景设为纯色,登录时的欢迎界面可能会卡住长达 30 秒。这让很多人感到疑惑:不是简化了背景,系统应该更快才对,怎么反而更慢了?
对此,微软工程师 Raymond Chen 最近写文解释了当初这个“反常现象”的真正原因。
原来,Windows 登录流程背后有一套等候机制。当你在电脑上输入密码登录后,Windows 其实还在后台忙着把桌面“摆好”。它要先生成任务栏、加载各种系统服务、把桌面窗口准备好、图标一个个放上去,再把桌面背景图加载出来并显示在屏幕上。
系统不会马上让你看到桌面,它会等这些“环节”都汇报“我准备好了”。只有所有组件都说“OK”了,或者最多等上 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 秒卡欢迎界面的问题。
这类问题容易出现,是因为“组策略”这种功能,往往是开发后期才加进去的。程序员加这种功能的方式,通常就是:找到原来的功能代码,然后在外面套一层“如果策略允许,就执行”。结果一不小心,就把“告诉系统我准备好了”这句也套进了条件里——于是当策略禁用这个功能时,通知也跟着没了,系统又在那白等。
// 原始逻辑InitializeDesktopIcons(){ bind to the desktop folder enumerate the icons add them to the screen Report(DesktopIconsReady);}// 加了组策略后的逻辑InitializeDesktopIcons(){ if (desktop icons allowed by policy) { bind to the desktop folder enumerate the icons add them to the screen Report(DesktopIconsReady); } }
问题是,这样一来,如果策略禁止显示桌面图标,“准备就绪”的信号也不会发出,系统同样会在欢迎界面上干等 30 秒。
需要注意的是,登录本身并没有真的慢了 30 秒,而是由于系统在等待无果,欢迎界面显示时间被拉满了。
幸运的是,从支持页面文章时间戳来看,这个问题在 2009 年 11 月就被修复了——也就是 Windows 7 正式发布几个月后,现在不会有这样的问题。
来源:https://devblogs.microsoft.com/oldnewthing/20250428-00/?p=111121
推荐阅读:
▶“把BUG当特性,真是见鬼了!”Linux之父痛斥文件系统「大小写不敏感」:这是天大的错误
▶“血亏!我花3000+元用Claude做游戏,结果还不如去「白嫖」Gemini 2.5……”
▶在美打拼12年被迫离开!GPT-4.5幕后功臣绿卡申请三年后遭拒