我有关闭了自动更新的Windows 7 PC。我大约每月一次进行批量更新。但是每次“检查更新”都需要15到30分钟。我不明白为什么检查更新会这么慢?我想知道后台发生了什么。它在计算哈希吗?启用了自动更新的PC每次启动时都会遭受相同的命运吗(只是我不知道)?
我有关闭了自动更新的Windows 7 PC。我大约每月一次进行批量更新。但是每次“检查更新”都需要15到30分钟。我不明白为什么检查更新会这么慢?我想知道后台发生了什么。它在计算哈希吗?启用了自动更新的PC每次启动时都会遭受相同的命运吗(只是我不知道)?
Answers:
在检查更新部分是因为如此缓慢:
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内部机制,因此我们最终不得不自己弄清楚或推测。
现有答案中已解决了该问题的几个方面。我将尝试通过大体列出原因来将它们联系在一起,而不必重复已经说过的话:
让我们更详细地研究这些点。
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。
多年来,此问题的来龙去脉,并进行了不同的修复,因此,这是我截至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并转到该地址
在搜索框中输入3125574,然后按Enter键。
现在,您将看到此汇总的所有版本,选择所需的版本并将其下载到以后可以找到的位置。
还请使用Windows Update目录页首先下载并安装此更新3020369,这是汇总的先决条件,然后安装3125574,也请确保在应用这些更新时断开与Internet的连接。
在扫描过程中使用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分钟多一点的时间即可搜索新的更新。为了加快更新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个大的更新即可达到当前补丁程序级别。不再需要这种缓慢的检查。
如果过去使用XP更新的经验有任何迹象,他们有时会在其中放一个指数时间算法。一旦有很多更新,那将永远。当前,Win 7更新处于类似情况。需要花很长时间,尽管目前尚无官方解释。有趣的是,当新版本推出时,“只是发生”(对于旧版本)。愤世嫉俗的我忍不住想像有人可能会故意地希望这种情况发生,就像[旧] Windows一样慢?您需要一个新版本。也许这只是MS开始假期的方式。
有某种针对WU慢速的修复程序,该修复程序不会自动提供(即通过更新本身):https : //support.microsoft.com/en-us/kb/3102810 A,它并没有真正改变就我的情况而言,我已经在两台不同的计算机(一台32位和一台64位)上进行了尝试。自10月以来也已经出现,所以可能不是最新一期。
今天,大约有十亿台运行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更新并切换到允许您下载更新但不能自动安装的选项。这样,您无需等待检查或后台文件下载即可获取所需的安装文件。
现在,回答为什么它很慢。我认为这完全可以归结为Windows更新是在构建时就减少了对用户的明显影响这一事实。它使用BITS服务(后台智能传输服务)来检查和下载更新。
同样,此服务的重点是以一种不会破坏用户的方式进行工作。由于Microsoft从未打算让客户每月打开和关闭更新服务,因此设计故意降低了速度。
您可能要研究的是获取自己的WSUS服务器设置。这样,您可以像企业管理员一样拒绝更新,并且可以将选择的更新应用于或拒绝拥有的所有Windows设备。使琐事有选择地更新,减少了琐事。
这很慢,因为Windows Update和其他几个Windows系统组件使用Microsoft JET Blue数据库引擎,该引擎的性能非常差,并且占用大量资源。
就像其他人提到的那样,Windows Update代码本身似乎也存在一定程度的递归,导致更新数量增加,导致性能下降。
只是添加另一个数据点。我最近不得不拿出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也可能存在类似的情况。
我遇到了这个问题,我所做的是让Windows Update在新安装的计算机上首次在夜间运行。成功完成此操作的提示:
转到能源选项,将待机时间设置为“从不”
打开自动Windows更新。默认时间03:00 AM是可以的,因为搜索过程也需要时间
还建议您第一次执行“ Windows更新需要更新某些组件...”过程(与Windows 7情况下的200多个更新相比,此过程很快)
正确更新所有内容后,您会发现已安装了大量补丁程序(约200个)。Windows还进行了碎片整理,并且还运行Windows Defender更新/扫描。
之后,其余的Windows Update周期(搜索更新-安装-重新引导-搜索更新-安装-重新引导-搜索更新...直到#个更新变为0)工作得更快。
嘿,我认为我以前的回答不是很好,但是我给出了如何使PC更快运行的好的建议。在Windows 7的全新安装中,我使用原始版本,但仍使用流式更新安装盘,无论如何,我建议您尝试将kb3102810和kb3050256更新为全新安装后立即安装,这两项可以显着提高搜索和安装更新的速度。
不进行哈希处理,但是可以,它进行了大量检查(与某些DLL文件版本一样深)。无论使用哪种系统,速度都很慢。
作为解决方案,请将其关闭,在白天或晚上不需要太多系统时,将其打开,强制其检查更新并全部安装。