編譯 | 蘇宓
出品 | CSDN(ID:CSDNnews)
日常使用中,有些用戶喜歡把電腦桌面背景設成純色,比如經典的藍綠色。不僅看著清爽,還方便快速找到桌面上的文件,久而久之也成了一種“視覺上的舒適區”。
但奇怪的是,微軟曾在一篇官方支持文檔中提到:在 Windows 7 或 Windows Server 2008 R2 中,如果你把背景設為純色,登錄時的歡迎界面可能會卡住長達 30 秒。這讓很多人感到疑惑:不是簡化了背景,系統應該更快才對,怎么反而更慢了?
對此,微軟工程師 Raymond Chen 最近寫文解釋了當初這個“反?,F象”的真正原因。
原來,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
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.