題 為什麼檢查Windows Update這麼慢?


我有關閉自動更新的Windows 7 PC。我每個月都會批量更新一次。但每次“檢查更新”需要15到30分鐘。我不明白為什麼檢查更新會這麼慢?我不得不懷疑背景中發生了什麼。是計算哈希嗎?啟動自動更新的電腦每次啟動時都會遭受同樣的命運(只有我不知道)嗎?


120
2018-03-16 04:37


起源


好像後台應用程序正在運行。你的系統性能如何? - vembutech
我的電腦表現不錯。 CPU幾乎沒有超過10%。在“搜索更新”時我沒有註意到任何異常。 - some user
為什麼要首先禁用Windows Update?它可以在後台運行,你甚至不會注意到它要求你重啟,你不必立即做。 - gronostaj
我喜歡批量更新,所以如果出現問題我可以回滾。回滾很難跟踪後台更新和耗時。通過手動更新,我還可以選擇在繼續之前查看更改。此外,偶爾我幫助人們清理安裝他們的PC,我面臨同樣的問題。 - some user
@someuser您可以充分利用這兩個方面:將WU配置為 下載更新,但讓我選擇是否安裝它們 這將在後台掃描所需的更新,但是 決不 未經您的同意安裝它們。它們不會自動安裝,但是當您執行每月修補例程時,將列出所有可應用的更新。 - Twisty Impersonator


答案:


查詢更新 部分是如此緩慢,因為:

  • Windows 7使用 基於組件的服務,這意味著Windows Update必須非常難以確定文件和組件依賴性/相互依賴性,維護舊文件/組件的並行版本,同時仍然可以卸載單個更新/組件但不破壞任何其他更新/組件,一直考慮到超越,上帝知道還有什麼。執行所有這些操作的代碼必須非常複雜。

  • Windows 7 64位必須維護每個更新的32位和64位版本。

  • Windows必須維護兩者 GDR和LDR 每次更新的版本,這意味著在Windows 7 64位上,每次更新都會獲得32位GDR,32位LDR,64位GDR,64位LDR。

  • Windows Update背後的代碼非常低效,可能是由於其概念複雜性。我在過去幾年中的觀察結果是,隨著已發布更新的總數增加,更新檢查時間幾乎以指數方式增加。對我而言,這表明正在使用某種遞歸算法,可能是為了確定超越性或解決依賴性。

對我們來說不幸的是,微軟不喜歡談論Windows內部,所以我們最終不得不為自己解決或推測。


99
2017-07-02 04:25



這似乎也解釋了原因 安裝 更新太慢了。有什麼可以做的嗎? - Michael Hampton
@MichaelHampton根據我的經驗,有三件事可以幫助: 1 得到一台優秀的電腦 單線程 性能和大CPU緩存(例如3.4 GHz i5 / i7 Haswell), 2 獲得SSD硬盤, 3 安裝更新時,禁用AntiVirus軟件的實時監控組件。 - misha256
@MichaelHampton有些人給你錯誤的信息。 MS更新服務器通常非常快。掃描您的PC / HDD以獲取更新的內容通常也非常快。當您下次進行更新檢查時,請打開 資源監控 首先,這樣您就可以親眼看到更新的哪些部分佔用了這麼多時間。你會發現,最初,花了一些時間來捶打硬盤並與互聯網交談。完成之後,您將看到一個CPU內核100%處於永恆狀態。這是你PC上的更新引擎(低效率)下一步該做什麼。 - misha256
@someuser是的,確實。但是你正在考慮整體CPU利用率。查看單核的CPU利用率。在Windows Update期間,您將看到一個核心最大值為100%永恆。 Windows Update引擎顯然是CPU綁定到單個線程。確實RAM使用率也很高,但這不是緩慢的原因。這是更新引擎的算法複雜和/或效率低下。 - misha256
Debian如何做到這一切,只需要幾秒鐘和5分鐘(如果這是一個非常大的更新)。 CPU使用率很低,它在後台安靜地運行,你可以在中途停機,很少需要重啟。 - ctrl-alt-delor


在現有答案中處理了該問題的幾個方面。 我將嘗試通過一般方式列出原因將它們聯繫在一起, 不重複已經說過的話:

  1. Microsoft Windows Update機制非常複雜, 不幸的是,這也意味著複雜
  2. WU需要支持不可估量的硬件和軟件組合
  3. WU需要以正確的順序應用更新
  4. Windows 7是一個較舊的系統,SP2已經過期,可能永遠不會到達,這會產生很多更新
  5. 最近幾年,微軟承受了很大的壓力 安全問題,導致了很多繁忙的修復, 然後修復修復等等到第n代
  6. 微軟未能充分優化更新機制, 這通常是指數算法,導致蠻力 算法很慢。
  7. 微軟的WU服務器有時負擔過重。

讓我們更詳細地看一下這些觀點。

Windows Update的複雜性

更新發布後,它可以隨著時間的推移進入另外三個不同的階段:修訂,取代和過期。

更新修訂:當對先前發布的更新進行更改時,它稱為更新修訂版,其中一些下載內容已更改。這是部分而非完整的更新替換。

被取代的更新:這是對先前版本或發行版的完全替代。有時,Microsoft會將多個版本打包到一個軟件包中,並且該軟件包將替換其封裝的更新。

過期的更新:這些是從有效更新列表中刪除的更新。此類更新不再適用,並且不會檢測到安裝。大多數情況下,更新在被替代更新替換後過期。

更新還有一個依賴機制,這意味著一些更新 可能需要先應用其他更新。

過期更新對WU性能有問題,因為遺憾的是它們不會從計算機中刪除,因此它們仍然參與計算, 而且有這麼多。 使用磁盤清理可以實現一些改進 刪除過時的Windows更新 (首先獲取系統驅動器的備份磁盤映像,因為WU也非常脆弱)。

WU計算

由於存在大量可能的組合,Microsoft會以巨大樹的格式保留WU服務器上的所有更新。 決定需要應用哪些更新是通過樹修剪算法完成的,該算法考慮了客戶端安裝的硬件和軟件, 以及已安裝的所有更新,這本身就是其中之一 在修剪時需要成功應用的大量事實。

算法不能保證成功,這意味著WU是完美的 能夠破壞操作系統甚至使其無法啟動。 這是完全可以理解的,例如採用具有修訂版A2的更新A1,其中在A1和A2之間釋放了取決於A的更新B. 現在去確定安裝順序是A1-B-A2還是A1-A2-B,當錯誤的決定可能是致命的。

負擔過重的WU服務器

維基百科有這個說法 Windows Update統計信息 :

截至2008年,Windows Update已經處理了大約5億個客戶端   每天約3.5億次獨特掃描,並保持平均值   與客戶端計算機同時連接150萬個。在補丁星期二,微軟通常發布新軟件更新的那一天,   出站流量可能超過每秒500千兆位。

這些數字現在可能翻了一番,並解釋了為什麼這些服務器服務器 有時無法到達。 我正在使用“檢查更新但讓我選擇”的WU選項,以及 我自己的經驗是,有多天時間檢查更新 花費的時間比我願意等待的時間要長,需要延期。

Windows 7的悠久歷史

Windows 7於2009年7月22日發布。 大約17個月後,Service Pack 1(SP1)於2011年2月22日發布。 這是大約4。5年前,這意味著SP2早就應該了。

Service Pack的好處是安裝它會消除整個問題 更新歷史記錄,以便實際上WU從零開始,完全與之後一樣 全新安裝的Windows。這當然會加速 所有計算,因為要考慮的更新較少。

自SP1以來現有的更新數量解釋了為什麼今天的WU計算速度如此之慢。對於微軟來說​​,問題可以解決 “簡單地”通過升級到更新的Windows 8.1或Windows 10,所以WU 將考慮更少的更新。

結論

由於Microsoft仍在繼續對Windows 7應用大量更新, 隨著時間的推移,吳將繼續放慢速度。

一種可能的優化是 刪除過時的Windows更新。 另一種方法是使用“檢查更新但讓我選擇”的WU選項, 並檢查清晨或深夜的更新。

大多數更新也適用於Windows 8和10, 所以微軟的WU服務器的負擔只會在Windows 10時成倍增加 很快就會發布。微軟似乎還將其WU服務器的帶寬包裹起來 根據自己的政策,重點服務於最近 操作系統,所以我們應該期待Windows 7的另一個減速 一旦Windows 10發布,以及不成比例的更快更新 對於Windows 10。

如果WU太慢,唯一真正的解決方案是升級到更高版本的Windows。

好消息:Windows 7(和8.1)的SP2已經到來 

Microsoft已發布了Windows 7和8.1的實際SP2。 由於某些未知原因,Windows Update無法提供此更新, 所以必須手動下載和安裝。

在文章中了解如何獲取它:
微軟改革Windows 7和8.1更新 - 但不要將其稱為服務包


60
2017-07-02 19:58



在Windows 10預覽中檢查更新速度非常快。 - Michael Hampton
我有一種感覺,檢查更新仍然是CPU和內存密集型操作。但也許程序的編寫使得它不時產生CPU,因此不會減慢PC的速度。我不得不懷疑,對於那些自動更新開啟的人,每次開啟電腦時是否都會進行計算? - some user
@Renju的答案聲稱存在緩存,但根據我的經驗,檢查更新同樣很慢,即使在上一次檢查後立即完成。我自己不知情的意見是修剪是在WU服務器和客戶端完成的。我猜想服務器上的硬件和安裝的Microsoft產品/操作系統;在客戶端上由當前已安裝在計算機上的更新。 - harrymc
這個猜測的動機是海報上關於使用大量內存而不是大量CPU的WU的評論。這與從Microsoft下載到本地內存的大量更新樹一致,也許是本地修剪操作,需要更多來自Microsoft的信息。 - harrymc
“算法不能保證成功,這意味著WU完全有能力破壞操作系統甚至使其無法啟動。這完全可以理解”這是多麼無稽之談。 - Sam Watkins


這個問題多年來一直存在,並伴隨著不同的修復,所以這是我在2016年1月5日發布此問題的最新指南

查看下面的“編輯”部分,截至2016年5月,在完全更新後,有一種更快速的方法可以完全更新Windows 7 SP1。

這是我在重新安裝帶有SP1的W7時遇到的問題,或者在檢查更新時遇到Windows更新問題。

如果未安裝Service Pack 1,請在遵循本指南之前進行安裝。

下載KB-3138612  並將其保存在以後可以找到的地方

下載SUR工具   將它保存到同一個地方

在Windows加載之前重新啟動PC並斷開與互聯網的連接,這很重要,因為每個啟動窗口都會在後台檢查更新,這將開始檢查更新再次掛起並阻止安裝下載的軟件包直到完成檢查,因此在Windows加載之前斷開互聯網連接會阻止這種情況。

一旦啟動安裝KB-3138612,如果需要重新啟動,請執行此操作並保持與Internet斷開連接。

現在安裝SUR Tool包,這是一個大包,將安裝許多更新以及清理和修復Windows更新存儲。它還將減少以後需要安裝多少Windows更新。

安裝SUR軟件包重新啟動後,連接到Internet並進行手動Windows Update,它現在應該更快。即使經過這些修復,我已經看到一些W7 PC需要長達一個小時才能完成檢查更新,如果從控制面板手動啟動的話。

如果您有其他Windows更新問題並且安裝了上述2個更新, 下載此Microsoft Windows Update修復工具 (右鍵單擊“將鏈接保存為”)運行它並選擇積極模式以完全重置Windows更新。重新啟動並再次從“控制面板”中嘗試Windows更新。當其他Microsoft fixit工具失敗時,此工具可修復問題,至少在我的經驗中如此。

更新: 微軟有 發布了Windows 7 SP1的大量更新匯總,這類似於服務包,但他們並沒有這樣稱呼它。這將使得在乾淨安裝後更新Windows 7的速度更快,不再有Windows更新問題和許多重新啟動。此更新匯總將使系統可以在2016年4月的星期二進行修補。

這不是通過Windows Update發布的,您必須使用Internet Explorer才能獲取它,打開IE並轉到此地址

http://catalog.update.microsoft.com/v7/site/home.aspx

在搜索框3125574中輸入並按Enter鍵。

enter image description here

現在,您將看到此匯總的所有版本,選擇您需要的版本並將其下載到稍後可以找到的位置。

enter image description here

還可以使用Windows Update目錄頁面 首先下載並安裝此更新,3020369,這是匯總的先決條件,然後安裝3125574,在應用這些更新時也一定要斷開與互聯網的連接。


21
2018-01-16 18:23



好消息謝謝。我目前正在努力從最新的W7安裝到最新的低規格筆記本電腦,所以今晚我會給你的過程一個鏡頭。您是否注意到,在安裝SP1 redist之後,WU仍然希望下載並安裝所有SP1之前的更新以及SP1本身?如果是這樣,你有任何想法如何避免它嗎?我最近經常看到這個,我認為我剛剛做錯了。 (我通常去安裝W7>安裝芯片組/ gfx驅動程序>安裝SP1 redist>檢查更新。) - blackworx
我已經看到了這種行為,我只是讓它下載並再次安裝,通常當kb安裝程序運行時它看到它們已經安裝並轉移到鏈中的下一個更新,基本上它會跳過已經安裝的那些。 SUR工具應解決此問題。 - Moab
在離線安裝KB-3138612之後,這對我有用(下載它,切斷互聯網連接,安裝)。然後我重新啟動,MS更新提示在幾分鐘內下載軟件包。 - AndyC


當你使用 ETW / WPR / WPA檢查CPU使用情況 在掃描期間,您會看到CPU使用率來自 wuaueng.dll!CUpdatesToPruneList::AddSupersedenceInfoIfNeeded 這是從 wuaueng.dll!CAgentUpdateManager::FindUpdates。該 AddSupersedenceInfoIfNeeded方法是最慢的方法。這將執行名稱所指示的內容,並查看是否仍需要或取代提供/安裝的Windows 7更新(過時/替換為較新的更新)。這很慢。

使用上次Windows Update客戶端更新 2016年6月,是的 Windows 7 2016年7月更新匯總的一部分,更新搜索再次快速。

  1. 下載:

我只需要1分多鐘就可以搜索新的更新。要加快更新KB3172605的設置,請停止WindowsUpdate服務(net stop wuauserv)。

當你安裝幾個MSU更新時,這個WU服務停止技巧可以加快安裝速度:

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR /R "%~dp0" %%A IN (*Windows6.1-KB*.MSU) DO (
        CALL :SUB %%~nA        
    ECHO= Installing KB!KB_NUM!        
    >NUL net stop wuauserv
    WUSA "%%A" /quiet /norestart)
ECHO= == Press any key to close the Window ==
>NUL PAUSE

GOTO :EOF

:SUB

SET "KB_NUM=%*"
FOR /F "DELIMS=-" %%B IN ("%KB_NUM:*-KB=%") DO SET "KB_NUM=%%B"

在Windows 10中,Microsoft按照我的建議修復了該問題,並使更新累積起來。在這裡,您只需要一個大的更新即可達到當前的補丁級別。不再需要這種慢速檢查。


9
2018-04-08 04:28



似乎KB3138612修復了大多數W7sp1全新安裝,但我昨天做了一個,它仍然花了一個多小時來提供更新列表,我也注意到我的大多數W7 PC開始下載更新時屏幕不刷新和保持0%下載直到所有下載並開始安裝它們,Windows Update仍然被破壞。 - Moab


如果過去的XP更新經驗有任何跡象,他們偶爾會有 讓那裡的指數時間算法滑動。一旦你有很多更新......需要永遠。目前Win 7的更新情況類似;需要很長時間,儘管目前還沒有關於這一最新緩慢的官方解釋。有趣的是,這個“剛剛發生”(對於舊版本),當他們有一個新的。憤世嫉俗的我不禁想像有人可能故意想要發生這種情況,沿著[舊] Windows的路線很慢?你需要一個新版本。或許它只是開始假日季節的MS方式。

某種WU慢度有一個修補程序,它不是自動提供的(即通過更新本身): https://support.microsoft.com/en-us/kb/3102810 唉它在我的情況下沒有真正的區別,我在兩台不同的計算機上嘗試過它,一台32位,一台64位。它自10月以來一直存在,所以它可能不適用於最新一期[s]。


3
2017-12-11 10:56





目前有大約10億台運行Windows的PC。每台PC都有一些   硬件,配件,操作系統版本,語言,IE,設備的組合   驅動程序版本,各種補丁級別的Microsoft軟件,安全性   Windows Update系統必須對所有這些進行排序   組合,為個人電腦提供正確的更新。每   更新具有包括依賴項和“超級”的屬性   結構體。

掃描中的第一步(第一次運行)是確定操作系統版本,   SP,語言,PC製造商修剪可能更新的樹   電腦。基於該第一次掃描,發送一組可能的更新ID   到設備和本地客戶端計算哪些更新   安裝,取代等,然後將該列表發送到服務器和   還會在本地緩存副本以進行後續掃描。服務器響應   客戶要求更新的說明等   顯示在UI中(使用適當的UI語言)。

每天一次,自動更新客戶端在中進行檢查更新   後台並刷新已安裝更新的本地緩存,所以   隨後的掃描只是一個增量和快速。這些都存儲在   PC上的%windir%\ softwaredistribution文件夾。

還對先前下載的更新執行類似的過程。   該服務不會重新下載軟件包。

找到這篇文章,這將有助於我們至少了解搜索過程中發生的事情。它寫得很漂亮。所以我這樣張貼它。你可能會找到原來的帖子 這裡

當我將Windows更新設置更改為時,檢查安裝更新所花費的時間有明顯變化 Check for updates but let me choose whether to download and install them


2
2017-07-02 04:36



“Windows Update系統必須對所有這些組合進行分類,以便為單個PC提供正確的更新。”是的,這聽起來像是一個SELECT操作。如果只有算法在大型表中快速搜索,可以稱之為“索引”。那會有所幫助。 - David Tonhofer


在我看來,您最好的選擇是啟用Windows更新並切換到允許您下載更新但不自動安裝的選項。這樣,您可以獲得想要安裝的內容,而無需等待檢查或後台文件下載。

現在,回答為什麼它很慢。我認為這僅僅歸結於Windows更新的構建,同時減少了對用戶的顯著影響。它使用BITS服務(後台智能傳輸服務)來檢查和下載更新。

同樣,使用此服務的重點是以不會對用戶造成乾擾的方式工作。由於微軟從未打算讓客戶每個月都打開和關閉更新服務,因此設計速度有限。

你可能會想到的是獲得自己的WSUS服務器設置。這樣,您可以像企業管理員那樣拒絕更新,並且可以對您擁有的所有Windows設備應用或拒絕所選的更新。做有選擇性地更新的家務,少做家務。


1
2017-07-01 18:46



現在這是一個想法:它故意放慢速度。這確實讓重新安裝後立即更新真的很痛苦,但這就是我現在所處的情況。如果可能的話,一些加快速度的方法(不設置非常大的WSUS服務器)會很有用;在能夠使用電腦之前等待幾天不會很好...... - Michael Hampton
怎麼樣只是保留更新但設置為(只需下載。不要自動安裝)?這樣,您可以選擇可用的內容,除非您先批准,否則不會安裝任何內容。該選項似乎可以解決您的所有標準。 - Geruta
是的,但我仍然要等待它。等待等待等待...... - Michael Hampton
如果您在凌晨3點檢查更新並且您一直打開PC,它將在您睡著時檢查並下載。讓它完全可用,並在你醒來時隨時可以玩。 - Geruta
有第三方工具可以下載Windows更新,MBSA掃描速度非常快,並且會為您提供所有缺失更新的列表。最近還有一個針對Windows 7的Windows Update補丁(KB3050265),因為微軟認識到它們的實現對於RAM數量較少的機器來說是多麼令人痛苦(而且性能不佳)。 - ssnobody


它很慢,因為Windows Update和其他幾個Windows系統組件都使用了 微軟JET藍色 數據庫引擎,它遭受了眾所周知的糟糕表現,並且是一種整體資源浪費。

與其他人提到的一樣,Windows Update代碼本身也出現了一定程度的遞歸,隨著更新次數的增加導致性能下降。


1
2017-10-20 10:09





我遇到了這個問題,我所做的是讓Windows Update第一次在新安裝的機器上運行一夜。成功做到這一點的提示:

  • 轉到能量選項,將待機時間設置為“從不”

  • 打開自動Windows Update。默認時間03:00 AM是正常的,因為搜索過程也需要時間

  • 還建議第一次執行“Windows更新需要更新某些組件...”進程(與Windows 7中的200多個更新相比,快速進行)

當所有內容都正確更新後,您會發現安裝了大量補丁(大約200個)。 Windows還進行了碎片整理並運行了Windows Defender更新/掃描。

之後,剩餘的Windows Update循環(搜索更新 - 安裝 - 重新啟動 - 搜索更新 - 安裝 - 重新啟動 - 搜索更新......直到#updates變為0)工作得更快。


0
2017-10-24 20:34