为什么检查 Windows 更新这么慢?

som*_*ser 125 windows-7 windows-update

我有关闭自动更新的 Windows 7 电脑。我每个月左右批量更新一次。但每次“检查更新”需要 15 到 30 分钟。我不明白为什么检查更新会这么慢?我不得不想知道背景中发生了什么。是计算哈希吗?我的启用了自动更新的 PC 每次启动时都会遭受同样的命运吗(只是我不知道)?

mis*_*256 103

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

  • Windows 7 使用基于组件的服务,这意味着 Windows 更新必须非常努力地确定文件和组件依赖项/相互依赖项,维护旧文件/组件的并行版本,同时仍然可以卸载单个更新/components 但不破坏任何其他更新/组件,同时考虑到取代和上帝知道还有什么。完成所有这些工作的代码一定非常复杂。

  • Windows 7 64 位必须同时维护 32 位和 64 位版本的每个更新。

  • Windows 必须维护每个更新的GDR 和 LDR版本,这意味着在 64 位 Windows 7 上,每次更新都会获得 32 位 GDR、32 位 LDR、64 位 GDR、64 位 LDR。

  • Windows Update 背后的代码效率极低,可能是由于其概念上的复杂性。我在过去几年的观察是,随着发布更新总数的增加,更新检查时间几乎呈指数增长。对我来说,这表明正在使用某种递归算法,也许是为了确定超序或解决依赖关系。

对我们来说不幸的是,微软不喜欢谈论 Windows 内部,所以我们最终不得不自己弄清楚或推测。

  • @MichaelHampton 有些人给了你错误的信息。MS 更新服务器通常非常快。扫描您的 PC/HDD 以查找要更新的内容通常也非常快。下次进行更新检查时,请先打开 **Resource Monitor**,这样您就可以亲眼看看更新的哪些部分占用了如此多的时间。您会发现,最初,会花费一些时间来处理硬盘驱动器和与 Internet 交谈。完成后,您将看到一个 CPU 内核永远处于 100% 状态。那是您 PC 上的更新引擎(低效地)确定下一步要做什么。 (6认同)
  • Debian 怎么会做所有这些,而且只需要几秒钟到 5 分钟(如果它是一个非常大的更新)。CPU 使用率很低,它会在后台安静地运行,您可以中途关闭,而且您很少需要重新启动。 (6认同)
  • 这似乎也解释了为什么 _installing_ 更新如此缓慢。有什么可以做的吗? (3认同)
  • @MichaelHampton 根据我的经验,三件事可以提供帮助:**1** 获得具有出色*单线程* 性能和大型 CPU 缓存(例如 3.4 GHz i5/i7 Haswell)的 PC,**2** 获得固态硬盘drive, **3** 在安装更新时禁用 AntiVirus 软件的实时监控组件。 (3认同)
  • @someuser 是的,确实如此。但是您正在查看总体 CPU 利用率。看单核的CPU利用率。在 Windows 更新期间,您会看到一个内核永久使用最大值为 100%。Windows 更新引擎显然是受 CPU 限制的单个线程。当然 RAM 使用率也很高,但这不是速度慢的原因。是更新引擎的算法复杂和/或效率低下。 (3认同)

har*_*ymc 61

现有答案中处理了该问题的几个方面。我将尝试通过以一般方式列出原因来将它们联系在一起,而不重复已经说过的内容:

  1. Microsoft Windows Update 机制极其复杂,不幸的是这也意味着复杂
  2. WU需要支持无数的硬件和软件组合
  3. WU 需要以正确的顺序应用更新
  4. Windows 7 是一个较旧的系统,SP2 已经过期并且可能永远不会到达,这使得更新非常多
  5. 过去几年,微软承受着修复众多安全问题的巨大压力,这导致了非常忙碌的修复,然后是修复修复等等,直到第 n 代
  6. 微软对更新机制的优化不够,一般是指数算法,导致蛮力算法比较慢。
  7. Microsoft 的 WU 服务器有时负担过重。

让我们更详细地看一下这些要点。

Windows 更新的复杂性

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

更新修订:当对先前发布的更新进行更改时,它被称为更新修订,其中某些下载内容发生了更改。这是部分而非完整的更新替换。

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

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

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

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

吴计算

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

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

WU 服务器负担过重

维基百科有关于Windows 更新统计的说法:

截至 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 的好处是安装它会清除整个更新历史记录,因此实际上 WU 从零开始,就像全新安装 Windows 之后一样。这当然大大加快了所有计算的速度,因为要考虑的更新较少。

自 SP1 以来的大量现有更新解释了今天 WU 计算如此缓慢的原因。对于微软来说,这个问题可以通过升级到更新的 Windows 8.1 或 Windows 10 来“简单地”解决,因此 WU 将需要考虑的更新数量较少。

结论

由于 Microsoft 仍在继续对 Windows 7 应用大量更新,WU 只会随着时间的推移而不断放缓。

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

大多数更新也适用于 Windows 8 和 10,因此微软 WU 服务器的负担只会在 Windows 10 很快发布时成倍增加。微软似乎还根据自己的政策分配其 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 更新进行了彻底检查——但不要将其称为服务包

  • “该算法不能保证成功,这意味着 WU 完全有能力破坏操作系统,甚至使其无法启动。这完全可以理解” 真是胡说八道。 (3认同)
  • 在 Windows 10 预览版中检查更新的速度非常快。 (2认同)
  • 这个猜测的动机是发帖者关于 WU 使用大量 RAM 但不是大量 CPU 的评论。这与从 Microsoft 下载到本地内存中的大型更新树一致,并且可能需要 Microsoft 提供更多信息的本地修剪操作。 (2认同)

Moa*_*oab 23

多年来,此问题一直在不断变化,并进行了不同的修复,因此这是我截至 2016 年 1 月 5 日的此问题的更新指南

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

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

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

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

下载 SUR Tool 保存到同一个地方

在 Windows 加载之前重新启动 PC 并断开 Internet 连接,这很重要,因为在每个引导窗口都会在后台检查更新,这将再次开始检查更新挂起并阻止安装下载的软件包,直到它完成检查,因此在 Windows 加载之前断开与互联网的连接可以防止这种情况。

启动后安装 KB-3138612,如果需要重新启动,请执行此操作并保持与互联网的连接。

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

安装 SUR 包重启后,连接到互联网并执行手动 Windows 更新,它现在应该工作得更快了。即使在这些修复之后,我也看到一些 W7 PC 需要长达一个小时才能完成检查更新,如果从控制面板手动启动。

如果您有其他 Windows 更新问题并且安装了上述 2 个更新,请下载此 Microsoft Windows Update fixit 工具(右键单击“链接另存为”)运行它并选择积极模式以完全重置 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 并按回车键。

在此处输入图片说明

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

在此处输入图片说明

还可以使用 Windows Update Catalog 页面先下载并安装此更新 3020369,它是汇总的先决条件,然后安装 3125574,在应用这些更新时也请务必断开 Internet 连接。


mag*_*981 9

当您在扫描期间使用ETW/WPR/WPA 检查 CPU 使用率时,您会看到 CPU 使用率来自wuaueng.dll!CUpdatesToPruneList::AddSupersedenceInfoIfNeeded调用 from wuaueng.dll!CAgentUpdateManager::FindUpdates. 该AddSupersedenceInfoIfNeeded方法是最慢的事情。如果仍然需要或取代提供/安装的 Windows 7 更新(过时/由较新的更新替换),这将按照名称指示并查看。这是非常缓慢的。

使用2016 年 6 月的最后一次 Windows 更新客户端更新,这是Windows 2016 年 7 月 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"
Run Code Online (Sandbox Code Playgroud)

在 Windows 10 中,Microsoft 按照我的建议修复了该问题并使更新累积。在这里,您只需要 1 个大型更新即可达到当前补丁级别。不再需要这种缓慢的检查。


Ove*_*ind -2

不是散列,但是是的,它会检查很多(深至某些 DLL 文件版本)。不管你用什么系统,速度都很慢。

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

  • 不建议关闭 Windows 更新。当发现零日漏洞时,微软会在正常计划之外立即推出可用的关键更新。禁用 Windows 更新的计算机将不会收到它,并且将容易受到攻击,而其他计算机正在修补,因此受到攻击的可能性会上升。 (4认同)

归档时间:

查看次数:

375396 次

最近记录:

5 年,6 月 前