为什么检查Windows Update这么慢?


123

我有关闭了自动更新的Windows 7 PC。我大约每月一次进行批量更新。但是每次“检查更新”都需要15到30分钟。我不明白为什么检查更新会这么慢?我想知道后台发生了什么。它在计算哈希吗?启用了自动更新的PC每次启动时都会遭受相同的命运吗(只是我不知道)?


1
似乎后台应用程序正在运行。您的系统性能如何?
vembutech

1
我的电脑运行正常。CPU几乎不会超过10%。在“搜索更新”时,我没有发现任何异常。
用户

为什么首先要禁用Windows Update?它可以在后台运行,直到它要求您重新启动时您甚至都不会注意到,而不必立即执行此操作。
gronostaj 2015年

3
我喜欢批量更新,以便在出现问题时可以回滚。后台更新很难跟踪,回滚也很耗时。通过手动更新,我还可以选择在继续之前查看更改。另外,有时我会帮助人们清理安装PC的过程,但我也遇到了同样的问题。
一些用户

5
@someuser您可以两全其美:将WU配置为下载更新,但让我选择是否安装它们,这将在后台扫描所需的更新,但未经您的同意绝不安装它们。它们不会自动安装,但是当您执行每月修补程序时,所有适用的更新都会列出。
Twisty模仿者

Answers:


103

检查更新部分是因为如此缓慢:

  • 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内部机制,因此我们最终不得不自己弄清楚或推测。


3
这似乎也可以解释为什么安装更新如此之慢。有什么可以做的吗?
迈克尔·汉普顿

3
@MichaelHampton以我的经验,三件事可以帮助您:1获得具有出色单线程性能和大CPU缓存(例如3.4 GHz i5 / i7 Haswell)的PC ,2获得SSD硬盘,3禁用实时监视组件更新时安装您的AntiVirus软件。
misha256

6
@MichaelHampton有些人给了您错误的信息。MS Update Server通常非常快。通常,扫描PC / HDD来进行更新也非常快。下次进行更新检查时,请先打开资源监视器,以便您自己查看更新的哪些部分占用了很多时间。您会发现,最初花费一些时间来调试硬盘并与Internet通讯。完成之后,您将看到一个CPU内核永久处于100%的状态。那就是您PC上的更新引擎(无效率地)弄清楚下一步该怎么做。
misha256

2
@someuser是的,的确。但是,您正在查看整体CPU利用率。查看单核的CPU使用率。在Windows Update期间,您将看到一个核心以100%的永恒度最大化。Windows Update引擎显然是CPU绑定到单个线程的。当然,RAM的使用率也很高,但这不是速度慢的原因。是更新引擎的算法复杂和/或效率低下。
misha256

5
Debian如何完成所有这些工作,并且只需几秒钟到5分钟(如果这是一个很大的更新)。由于CPU使用率极低,因此它可以在后台安静地执行操作,您可以部分关闭它,并且几乎不需要重新启动。
ctrl-alt-delor

61

现有答案中已解决了该问题的几个方面。我将尝试通过大体列出原因来将它们联系在一起,而不必重复已经说过的话:

  1. Microsoft Windows Update机制非常复杂,不幸的是,这也意味着复杂
  2. WU需要支持数量众多的硬件和软件组合
  3. WU需要以正确的顺序应用更新
  4. Windows 7是较旧的系统,并且SP2已过期,可能永远不会到来,因此需要进行大量更新
  5. 过去的几年中,Microsoft在解决众多安全问题方面承受着巨大的压力,这导致了非常繁忙的修复,然后是第n代的修复等等。
  6. Microsoft无法充分优化更新机制,该机制通常是指数算法,导致蛮力算法相当慢。
  7. 微软的WU服务器有时负担过重。

让我们更详细地研究这些点。

Windows Update的复杂性

发布更新后,随着时间的推移,它可以进入三个附加的不同阶段:修订,取代和到期。

更新修订:对以前发布的更新进行更改时,称为更新修订,其中一些下载内容已更改。这是部分而非全部更新。

取代的更新:这是一个或多个先前版本的完整替代。有时,Microsoft会将多个版本包装到一个软件包中,而该软件包将替换其封装的更新。

过期的更新:这些是从有效更新列表中删除的更新。此类更新不再适用,并且不会检测到安装。大多数情况下,更新被替换为更新后就会过期。

更新还具有依赖性机制,这意味着某些更新可能需要先应用其他更新。

过期的更新对于WU性能是有问题的,因为不幸的是,它们没有从计算机中删除,因此它们仍参与计算,并且其中有很多。通过使用“磁盘清理” 删除过时的Windows更新 (可以获取系统驱动器的备份磁盘映像,因为WU也非常脆弱),可以实现一些改进。

用水单位计算

由于可能的组合数量众多,Microsoft将所有更新以巨型树的形式保存在WU服务器上。通过树修剪算法来确定需要应用哪些更新,该算法考虑了客户端已安装的硬件和软件以及已经安装的所有更新,这本身就是需要解决的大量事实修剪时全部成功应用。

该算法不能保证成功,这意味着WU完全有能力破坏OS甚至使其无法启动。这是完全可以理解的,例如,采用具有修订版A2的更新A1,其中在A1和A2之间发布了依赖于A的更新B。现在来看错误的决定可能致命的安装顺序是应该是A1-B-A2还是A1-A2-B。

WU服务器负担过重

维基百科上有关于Windows Update统计信息的说法:

截至2008年,Windows Update拥有约5亿个客户端,每天处理约3.5亿次唯一扫描,并且平均保持与客户端计算机的150万同时连接。在微软通常发布新软件更新的当天星期二的补丁程序中,出站流量可能会超过每秒500吉比特。

这些数字到现在可能已经增加了一倍,并解释了为什么有时无法访问WU服务器。我正在使用“检查更新,但让我选择”的WU选项,我的经验是,检查更新的日期和时间有时比我愿意等待的时间长,需要延迟。

Windows 7的悠久历史

Windows 7于2009年7月22日发布。大约17个月后,Service Pack 1(SP1)于2011年2月22日发布。这大约是4.5年前,这意味着SP2早就该了。

Service Pack的好处是,安装Service Pack会清除整个更新历史记录,因此实际上WU从零开始,与在全新安装Windows之后完全一样。这当然可以极大地加快所有计算的速度,因为要考虑的更新较少。

自SP1以来,已有的大量更新解释了为什么今天的WU计算如此之慢。对于Microsoft而言,可以通过升级到更新的Windows 8.1或Windows 10来“简单地”解决该问题,因此WU将考虑较少的更新。

结论

由于Microsoft仍继续对Windows 7应用大量更新,因此WU只会随着时间的流逝而继续减慢速度。

一种可能的优化是删除过时的Windows更新。另一个方法是使用“检查更新,但让我选择”的WU选项,并在清晨或深夜检查更新。

大多数更新也适用于Windows 8和10,因此,只有在Windows 10即将发布时,Microsoft WU服务器的负担才会增加。微软似乎也根据自己的政策分配了其WU服务器的带宽,重点是为更新的操作系统提供服务,因此,我们应该期望Windows 10发布后Windows 7的速度会再次下降,并且更新速度会不成比例。对于Windows 10。

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

好消息:适用于Windows 7(和8.1)的SP2已到来

Microsoft已发布了实际上是Windows 7和8.1的SP2。由于某些未知原因,此更新将无法从Windows Update获得,因此必须手动下载并安装。

在文章中阅读有关如何获取此文件的信息:
Microsoft对Windows 7和8.1更新进行了大修-但不要将其称为Service Pack


2
在Windows 10预览版中检查更新非常快。
Michael Hampton

我觉得检查更新仍然是CPU和内存密集型操作。但是也许编写程序时会不时产生CPU,因此不会降低PC的速度。我想知道是否对于那些打开了自动更新的用户,每次PC打开时都会进行计算吗?
使用者

@Renju的答案声称存在缓存,但是根据我的经验,即使在上一次检查之后立即进行更新检查也同样缓慢。我自己不知情的意见是,修剪同时在WU服务器和客户端上完成。我猜这是在服务器上通过硬件安装的Microsoft产品/操作系统;在客户端上通过计算机上当前已安装的更新进行安装。
harrymc

2
此猜测是由张贴者关于使用大量RAM但未使用大量CPU的WU的评论引起的。这与从Microsoft下载到本地内存中的大型更新树,以及可能需要Microsoft提供更多信息的本地修剪操作是一致的。
harrymc

3
“不能保证算法成功,这意味着WU完全有能力破坏OS甚至使其无法启动。这完全可以理解。”这真是胡说八道。
山姆·沃特金斯

22

多年来,此问题的来龙去脉,并进行了不同的修复,因此,这是我截至2016年1月5日为止该问题的最新指南。

检查下面的“编辑”部分,从2016年5月开始全新安装后,有一种更快的方法来完全更新Windows 7 SP1。

当我重新安装带有SP1的W7或Windows Update在检查更新时遇到问题时,我就是这样做的。

如果未安装Service Pack 1,请在遵循本指南之前进行安装。

下载KB-3138612 并将其保存在以后可以找到的位置

下载SUR工具 将其保存到同一位置

在Windows加载之前,重新启动PC并断开与Internet的连接,这一点很重要,因为在每次启动时,Windows都会在后台检查更新,这将开始检查更新是否再次挂起,并且将阻止安装已下载的软件包,直到完成安装为止检查,以便Windows加载之前断开与Internet的连接可以防止这种情况。

一旦启动,请安装KB-3138612,如果需要重新启动,请保持断开连接。

现在安装SUR Tool软件包,这是一个很大的软件包,它将安装许多更新以及清理和修复Windows更新存储。它还将减少以后需要安装更多的Windows更新。

重新安装SUR软件包后,连接到Internet并进行手动Windows Update,它现在应该可以更快地工作。即使经过这些修复,我仍然看到一些W7 PC可能需要一个小时才能完成检查(如果从“控制面板”手动启动)是否有更新。

如果您还有其他Windows更新问题,并且已安装上述2个更新,请下载此Microsoft Windows Update fixit工具(右键单击“另存为”)运行该工具,然后选择积极的模式以完全重置Windows更新。重新启动,然后再次从“控制面板”尝试Windows Updates。至少根据我的经验,此工具可解决其他Microsoft Fixit工具失败时的问题。

更新:微软为Windows 7 SP1发布了一个庞大的更新汇总,类似于Service Pack,但他们没有这样称呼。全新安装后,Windows 7的更新速度将大大提高,不再出现Windows更新问题,并且会多次重启。此更新汇总将使系统当前更新到2016年4月(星期二)。

这不是通过Windows Update发布的,您必须使用Internet Explorer来获取它,打开IE并转到该地址

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

在搜索框中输入3125574,然后按Enter键。

在此处输入图片说明

现在,您将看到此汇总的所有版本,选择所需的版本并将其下载到以后可以找到的位置。

在此处输入图片说明

还请使用Windows Update目录页首先下载并安装此更新3020369,这是汇总的先决条件,然后安装3125574,也请确保在应用这些更新时断开与Internet的连接。


很棒的信息,谢谢。我目前正在努力从全新安装的W7中获取低规格笔记本电脑的最新信息,因此,今晚我将为您的过程做个尝试。在安装SP1 Redist之后,您有没有注意到WU仍然想要下载并安装所有SP1之前的更新以及SP1本身?如果是这样,您是否知道如何避免呢?我最近经常看到这种情况,并且我假设我只是以错误的顺序进行了某些操作。(我通常去安装W7>安装芯片组/ gfx驱动程序>安装SP1 redist>检查更新。)
blackworx

1
我已经看到了这种行为,我只是让它重新下载并安装,通常在kb安装程序运行时,它会看到它们已安装并移至链中的下一个更新,基本上它会跳过那些已安装的更新。SUR工具应解决此问题。
摩押

1
离线安装KB-3138612(下载,切断互联网连接,安装)后,这对我有用。然后,我重新启动,MS更新提示在几分钟之内下载软件包。
AndyC

9

在扫描过程中使用ETW / WPR / WPA检查CPU使用率时,您会看到CPU使用率来自的wuaueng.dll!CUpdatesToPruneList::AddSupersedenceInfoIfNeeded调用方wuaueng.dll!CAgentUpdateManager::FindUpdates。该AddSupersedenceInfoIfNeeded方法是最慢的事情。这将按照名称指示的方式进行操作,并查看是否仍需要或取代所提供/安装的Windows 7更新(已被更新的版本取代/替换)。这很慢。

随着2016年6月的最后一次Windows Update Client更新(这是Windows 7 July 2016更新汇总)的一部分,更新搜索又很快了。

  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按照我的建议解决了该问题,并累积了更新。在这里,您只需要1个大的更新即可达到当前补丁程序级别。不再需要这种缓慢的检查。


1
似乎KB3138612已在大多数W7sp1全新安装中对其进行了修复,但我昨天进行了一次更新,并且仍然花费了一个多小时来提供更新列表,而且我注意到在大多数W7 PC上,当它开始下载屏幕时不会刷新更新,并且保持为0%的下载量,直到全部下载并开始安装为止,Windows Update仍然损坏。
摩押

3

如果过去使用XP更新的经验有任何迹象,他们有时会在其中放一个指数时间算法。一旦有很多更新,那将永远。当前,Win 7更新处于类似情况。需要花很长时间,尽管目前尚无官方解释。有趣的是,当新版本推出时,“只是发生”(对于旧版本)。愤世嫉俗的我忍不住想像有人可能会故意地希望这种情况发生,就像[旧] Windows一样慢?您需要一个新版本。也许这只是MS开始假期的方式。

有某种针对WU慢速的修复程序,该修复程序不会自动提供(即通过更新本身):https : //support.microsoft.com/en-us/kb/3102810 A,它并没有真正改变就我的情况而言,我已经在两台不同的计算机(一台32位和一台64位)上进行了尝试。自10月以来也已经出现,所以可能不是最新一期。


2

今天,大约有十亿台运行Windows的PC。每台PC都有硬件,附件,操作系统版本,语言,IE,设备驱动程序版本,各种修补程序级别的Microsoft软件,安全更新等的某种组合。WindowsUpdate系统必须对所有这些组合进行分类,以便为一台个人电脑。每个更新具有包括依赖关系和“超控”结构的属性。

扫描的第一步(首次运行)是确定操作系统版本,SP,语言,PC制造商,以修剪PC可能更新的树。基于该第一次扫描,一组可能的更新ID被发送到设备,并且本地客户端计算哪些更新已安装,被替换等,然后将该列表发送到服务器,并且还在本地缓存副本以用于后续扫描。服务器以客户端(以适当的UI语言)中显示的描述等响应客户端请求更新。

每天一次,自动更新客户端在后台进行一次检查更新,并刷新已安装更新的本地缓存,因此后续扫描只是一次快速而增量的扫描。这些存储在PC上的%windir%\ softwaredistribution文件夹中。

对先前下载的更新也执行类似的过程。该服务不会重新下载软件包。

找到了这篇文章,这将至少有助于我们了解搜索过程中的实际情况。它写得很漂亮。所以我就这样发布它。您可以在这里找到原始帖子

当我将Windows更新设置更改为时,检查安装更新所需的时间发生了明显变化。 Check for updates but let me choose whether to download and install them


“ Windows Update系统必须对所有这些组合进行分类,以为单个PC提供正确的更新。” 是的,这听起来像是SELECT操作。如果只有用于快速搜索大型表的算法,则可以将其称为“索引编制”。那会有所帮助。
David Tonhofer '16

1

我认为最好的选择是仅启用Windows更新并切换到允许您下载更新但不能自动安装的选项。这样,您无需等待检查或后台文件下载即可获取所需的安装文件。

现在,回答为什么它很慢。我认为这完全可以归结为Windows更新是在构建时就减少了对用户的明显影响这一事实。它使用BITS服务(后台智能传输服务)来检查和下载更新。

同样,此服务的重点是以一种不会破坏用户的方式进行工作。由于Microsoft从未打算让客户每月打开和关闭更新服务,因此设计故意降低了速度。

您可能要研究的是获取自己的WSUS服务器设置。这样,您可以像企业管理员一样拒绝更新,并且可以将选择的更新应用于或拒绝拥有的所有Windows设备。使琐事有选择地更新,减少了琐事。


1
现在有一个想法:故意降低速度。但是,这确实使重新安装后立即进行更新确实很痛苦,这就是我现在遇到的情况。如果可能的话,某种加快速度的方法(无需设置非常大的WSUS服务器)将很有用;等待几天才能使用计算机是不好的……
Michael Hampton

只保留更新但将其设置为(只需下载。不自动安装)怎么样?这样,您可以选择可用的内容,除非先获得批准,否则它不会安装任何内容。该选项似乎可以解决您的所有条件。
Geruta

是的,但我仍然必须等待。等待,等待,等待,等待……
迈克尔·汉普顿

如果您要在凌晨3点检查更新,而您始终保持PC处于休眠状态,则它将在睡眠时检查并下载。使其完全可用,并在您起床时可供您使用。
Geruta

1
有第三方工具可以下载Windows更新,MBSA扫描非常快,并且会为您提供所有缺少的更新的列表。自从Microsoft意识到对于具有较少RAM的计算机而言,它们的实现是多么痛苦(并且表现不佳),最近还为Windows 7提供了Windows Update补丁(KB3050265)。
ssnobody 2015年

1

这很慢,因为Windows Update和其他几个Windows系统组件使用Microsoft JET Blue数据库引擎,该引擎的性能非常差,并且占用大量资源。

就像其他人提到的那样,Windows Update代码本身似乎也存在一定程度的递归,导致更新数量增加,导致性能下降。


0

只是添加另一个数据点。我最近不得不拿出Vista PC。我将Vista从SP1手动升级到SP2,但是检查更新需要花费很多时间。24小时以上无任何反应。

我进行了一次谷歌搜索,找到了一个解决方案,其中包括安装以下更新:

http://www.catalog.update.microsoft.com/Search.aspx?q=KB3205638%20vista http://www.catalog.update.microsoft.com/Search.aspx?q=KB4012583%20vista http:// www.catalog.update.microsoft.com/Search.aspx?q=KB4015195%20vista http://www.catalog.update.microsoft.com/Search.aspx?q=KB4015380%20vista

手动下载并安装更新后。我运行了10分钟的更新检查,发现有200个更新。请记住,这是针对Vista的,但我认为Windows 7也可能存在类似的情况。


-1

我遇到了这个问题,我所做的是让Windows Update在新安装的计算机上首次在夜间运行。成功完成此操作的提示:

  • 转到能源选项,将待机时间设置为“从不”

  • 打开自动Windows更新。默认时间03:00 AM是可以的,因为搜索过程也需要时间

  • 还建议您第一次执行“ Windows更新需要更新某些组件...”过程(与Windows 7情况下的200多个更新相比,此过程很快)

正确更新所有内容后,您会发现已安装了大量补丁程序(约200个)。Windows还进行了碎片整理,并且还运行Windows Defender更新/扫描。

之后,其余的Windows Update周期(搜索更新-安装-重新引导-搜索更新-安装-重新引导-搜索更新...直到#个更新变为0)工作得更快。


-1

嘿,我认为我以前的回答不是很好,但是我给出了如何使PC更快运行的好的建议。在Windows 7的全新安装中,我使用原始版本,但仍使用流式更新安装盘,无论如何,我建议您尝试将kb3102810和kb3050256更新为全新安装后立即安装,这两项可以显着提高搜索和安装更新的速度。


我也想添加下一个建议完成。首先像这样在svchost中进行单独的Windows更新服务。转到regedit,然后HKEY_LOCAL_MACHINE> SOFTWARE> microsoft> windowsNT>当前版本> svchost。将有netsvcs或其他的密钥。键并命名为您想要的名称,例如,将其命名为“ updater”。在此新创建的键中,您从netsvcs键(2个DWORD 32位和一个默认值)中复制值。之后,在svchost键中,您将新的多字符串值命名为Windows的此多字符串添加服务中的值更新名称为“ wuauserv”。下一步中的下一个注释。
Choova44

之后,打开注册表编辑器HKEY_LOCAL_MACHINE> SYSTEM>当前控制集>服务> wuauserv。在映像名称中,将值从svchost -k netsvc更改为svchost -k netsvc“您创建的密钥的名称”。之后,只需重新启动系统更新服务即可。您也可以单独使用BITS服务来查看资源使用情况。
Choova44 2015年

如果使用32位Windows,也非常有用的是在命令提示符下输入命令“ bcdedit / set extendedruserva 3072”。KB3065987也是更新客户端的好补丁。 speed.in注册表项wuauserv中有ImagePath值,请不要按我描述的方式更改图像名称。
Choova44 2015年

如果您要添加一些内容,请编辑答案,而不仅仅是添加应包含在答案正文中的注释。
Sami Kuhmonen 2015年

-2

不进行哈希处理,但是可以,它进行了大量检查(与某些DLL文件版本一样深)。无论使用哪种系统,速度都很慢。

作为解决方案,请将其关闭,在白天或晚上不需要太多系统时,将其打开,强制其检查更新并全部安装。


4
不建议关闭Windows Update。当发现零日漏洞时,Microsoft会在其正常计划之外立即推出关键更新(如果可用)。禁用Windows Update的计算机将无法接收它,并且在修补其他计算机时将很容易受到攻击,因此受到攻击的可能性会急剧上升。
gronostaj 2015年

从统计上讲,这些更新会产生太多异常情况,无法证明以这种方式进行漏洞预防。如果找到ZDV,则可以安装该特定的关键更新,而不会影响其他任何内容。
主宰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.