2015-03-16 04:37:45 +0000 2015-03-16 04:37:45 +0000
123
123
Advertisement

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

Advertisement

我的Windows 7电脑已经关闭了自动更新。我一个月左右做一次批量更新。但每次 “检查更新 "都需要15到30分钟。我不明白为什么检查更新会这么慢?我不禁要问,后台到底发生了什么?难道是计算哈希吗?难道我的电脑开启了自动更新功能后,每次开机时都会遭受同样的命运(只是我不知道)?

Advertisement

答案 (12)

103
103
103
2015-07-02 04:25:06 +0000

检查更新_部分之所以这么慢,是因为:

  • Windows 7使用了基于组件的服务,这意味着Windows Update必须非常努力地确定文件和组件的依赖关系/相互依赖关系,维护旧文件/组件的并排版本,同时仍然可以卸载单个更新/组件,但不破坏任何其他更新/组件,同时考虑到超强的效力和其他的东西。

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

  • Windows必须同时维护每个更新的GDR和LDR版本,这意味着在Windows 7 64位上,你会得到32位GDR,32位LDR,64位GDR,64位LDR。我在过去几年中的观察是,随着发布的更新总数的增加,更新检查时间几乎以指数级的方式增加。对我来说,这表明了某种递归算法的使用,也许是为了确定超标或解决依赖性。

不幸的是,对我们来说,微软不喜欢谈论Windows内部的问题,所以我们最终不得不自己去想办法或猜测。

60
60
60
2015-07-02 19:58:00 +0000

在现有的答案中,已经处理了这个问题的几个方面。我将尝试将它们联系在一起,将原因大致列举出来,不再重复已经说过的内容:

  1. 微软的Windows更新机制非常复杂,不幸的是,这也意味着复杂
  2. WU需要支持不可计数的硬件和软件组合
  3. WU需要按照正确的顺序应用更新
  4. Windows 7是一个比较老的系统,SP2已经过期了,很可能永远也不会到来,这就导致了非常多的更新 5.过去几年,微软的压力很大,修复了无数的安全问题,导致了非常多的忙于修复,然后是修复的修复,然后是修复的修复,等等,到了第n代 6.微软的更新是非常多的,这也是为什么微软的更新会越来越少,因为它的更新是非常多的,而且是非常多的,所以它的更新是非常多的。 7.微软对更新机制的优化力度不够,一般来说,更新机制都是指数型的算法,导致更新算法采用的是蛮力算法,速度相当慢。 7.微软的WUU服务器有时负担过重。

我们来详细了解一下这几点。

Windows更新的复杂性*

一个更新发布后,随着时间的推移,会进入三个不同的阶段。

**更新修改*。当对之前发布的更新进行修改时,称为 “更新修订",其中部分下载的部分内容被修改。这是对部分更新的替换,而不是完全替换。

替换更新* 。这是对之前的一个或多个版本的完全替换。有时,微软会将多个版本打包成一个软件包,该软件包将取代其封装的更新。

过期更新* 。这些更新是从有效更新列表中删除的更新。此类更新不再适用,不会被检测到安装。大多数情况下,一个更新在被Superseded Update取代后就会过期。

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

**过期更新对WUU的性能是有问题的,因为不幸的是,这些更新并没有从计算机中删除,所以它们仍然会参与计算,而且有这么多的更新。可以通过使用磁盘清理来【删除过期的Windows更新】(http://www.sevenforums.com/tutorials/307546-windows-updates-remove-outdated-updates-windows-7-a.html)(先将系统驱动器的备份磁盘映像拿出来,因为WU也是非常脆弱的)来实现一些改进。

**WU计算*

由于可能的组合数量巨大,微软将WU服务器上的所有更新都以庞大的树形格式保存下来。决定哪些更新需要应用,是通过树形修剪算法来完成的,这个算法考虑到了客户端安装的硬件和软件,以及所有已经安装的更新,这本身就是一个庞大的事实,在修剪的时候需要全部成功应用。这完全是可以理解的,比如拿一个更新A1,有A2版本,在A1和A2之间发布了一个基于A的更新B。

**负担过重的WU服务器*

维基百科对Windows Update统计 :

截至2008年,Windows Update约有5亿个客户端,每天处理约3.5亿次的独特扫描,并保持平均150万个客户端机器的同时连接。在补丁周二,也就是微软通常发布新软件更新的那一天,出站流量可能会超过每秒500千兆比特。

这些数字现在可能已经翻了一番,这也解释了为什么WUU服务器有时无法访问的原因。我使用的是 "检查更新但让我选择 "的WU选项,根据我自己的经验,有些日子和时间检查更新的时间会比我愿意等待的时间长,需要推迟。

*** Windows 7的历史长河**

Windows 7于2009年7月22日发布。约17个月后,2011年2月22日发布了Service Pack 1(SP1)。这大约是4.5年前的事了,也就是说,SP2早就该推出了。

服务包的好的一面是,安装Service Pack后,会清除掉整个更新历史记录,这样实际上WU从零开始,就像重新安装Windows后一样。这当然会大大加快所有的计算速度,因为需要考虑的更新数量较少。

自SP1以来,现有的更新数量之多,解释了为什么WU的计算速度如此之慢。对于微软来说,这个问题可以通过升级到最新的Windows 8.1或Windows 10来 "简单地 "解决,所以WU将有更少的更新数量来考虑。微软仍在继续对Windows 7进行大量的更新,WU只会随着时间的推移而不断变慢,

一个可能的优化方法是【删除过时的Windows更新】(http://www.sevenforums.com/tutorials/307546-windows-updates-remove-outdated-updates-windows-7-a.html)。

大部分的更新也适用于Windows 8和10,所以当Windows 10即将发布时,微软的WU服务器的负担只会成倍增加。微软似乎还根据自己的政策来分配WU服务器的带宽,重点是服务于最近的操作系统,所以我们应该预期一旦Windows 10发布后,Windows 7的更新速度会再次放缓,同时Windows 10的更新速度也会过快。

**好消息:Windows 7(和8.1)的SP2已经到了*

微软已经发布了Windows 7和8.1的SP2,实际上是Windows 7和8.1的SP2。

阅读文章: 微软全面更新Windows 7和8.1更新–但不要称其为服务包

22
Advertisement
22
22
2016-01-16 18:23:17 +0000

这几年来,这个问题来了又去,一路上有不同的修复方法,所以以下是我截至2016年1月5日的更新指南

查看下面的EDIT部分,从2016年5月起,有一个更快的方法可以在干净安装后完全更新Windows 7 SP1,这是我在重装W7与SP1时,或者遇到Windows更新卡住检查更新的问题时,所做的事情。

下载KB-3138612并保存在你以后可以找到的地方 下载SUR工具 保存到同一个地方

重启电脑并在Windows加载之前断开网络连接,这一点很重要,因为每次开机时Windows都会在后台检查更新,这将会开始检查更新,并会阻止安装下载的软件包,直到它完成检查,所以在Windows加载之前断开网络连接可以防止这种情况。

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

安装了SUR工具包后,重新启动,连接到互联网,然后手动进行Windows更新,现在应该会快很多。

如果你有其他的Windows更新问题,并且上面的2个更新已经安装好了,下载这个微软Windows更新修复工具 (右键点击 “保存链接为”)运行它,选择 “激进模式 "来完全重置Windows更新。重新启动,然后再次从控制面板中尝试Windows更新。这个工具可以修复其他微软的fixit工具失败时的问题,至少在我的经验中是这样。这将使Windows 7的更新速度大大加快,在干净安装后,不再有Windows更新问题和多次重启。这个更新卷积将使系统更新到2016年4月2日星期二的补丁。

这不是通过Windows Update发布的,你必须使用IE浏览器来获取,打开IE,转到这个地址

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

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

现在你会看到所有版本的更新,选择你需要的版本,然后下载到你以后可以找到的地方。

也可以使用Windows Update目录页面先下载并安装这个更新,3020369,这是安装更新的前提条件,然后安装3125574,在应用这些更新时也要注意断开网络连接。

9
9
9
2016-04-08 04:28:59 +0000

当你在扫描过程中使用ETW/WPR/WPA检查CPU的使用情况时,你会看到CPU的使用情况来自于wuaueng.dll!CUpdatesToPruneList::AddSupersedenceInfoIfNeeded,而这个方法是由wuaueng.dll!CAgentUpdateManager::FindUpdates调用的。AddSupersedenceInfoIfNeeded方法是最慢的**。这个方法的作用就像名字所显示的那样,查看提供/安装的Windows 7更新是否仍然需要或被取代(过时的/被更新的)。这是很慢的。

随着2016年6月的最后一次Windows Update Client更新,也就是Windows 7 2016年7月更新滚动的一部分,更新搜索速度又快了。下载: - 32Bit: https://www.microsoft.com/en-us/download/details.aspx?id=53335 - 64Bit: https://www.microsoft.com/en-us/download/details.aspx?id=53332

我搜索新的更新只需要1分多钟的时间。为了加快KB3172605更新的安装速度,请停止WindowsUpdate服务(net stop wuauserv)。

这个WUU服务停止的技巧可以加快安装速度,当你安装多个MSU更新时:

@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中,微软按照我的建议修复了这个问题,使更新累积。在这里,你只需要1个大的更新就可以达到当前的补丁级别。这种缓慢的检查不再需要了。

3
Advertisement
3
3
2015-12-11 10:56:36 +0000

如果过去的XP更新经验可以说明,他们偶尔会让一个指数时间算法溜走。一旦你有很多更新………..需要永远的时间。目前,Win 7的更新也是类似的情况;需要很长时间,虽然还没有官方的解释。有趣的是,当他们有新的版本时,这种情况 “只是发生"(对旧版本)。愤世嫉俗的我不禁想象,有人可能会故意让这种情况发生,就像[旧]Windows很慢?你需要一个新版本。或许这只是MS在假期开始时的一种方式。

有一个针对WU慢的某种热补丁,并没有自动提供(即通过更新本身)。 https://support.microsoft.com/en-us/kb/3102810 Alas it did not make a real difference in my case, and I’ve tried it on two different computers one 32-bit and one 64-bit. 另外,它从10月份就开始使用了,所以可能不是针对最新的问题。

2
2
2
2015-07-02 04:36:03 +0000

如今大约有10亿台运行Windows系统的PC。每台电脑都有一些硬件、配件、操作系统版本、语言、IE、设备驱动版本、微软软件的不同补丁级别、安全更新等等。Windows更新系统必须对所有这些组合进行排序,以便为单个PC提供正确的更新。每一个更新都有属性,包括依赖关系和 “超验 "结构。

扫描的第一步(第一次运行)是确定操作系统版本、SP、语言、PC制造商,以修剪PC可能的更新树。基于第一次扫描,可能的更新ID集被发送到设备上,本地客户端计算出哪些更新被安装、被取代等,然后将该列表发送到服务器,并在本地缓存一份副本,以便后续扫描。服务器响应客户端的更新请求时,会在UI中显示描述等信息(用相应的UI语言)。

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

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

找到这个帖子,至少可以帮助我们了解搜索过程中的真实情况。写得很好。所以我就这样贴出来了。你可以在这里

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

1
Advertisement
1
1
2015-10-20 10:09:12 +0000

这是因为Windows Update和其他几个Windows系统组件使用的是Microsoft JET Blue数据库引擎,它的性能很差,而且总体上是一个资源占用者。

1
1
1
2015-07-01 18:46:57 +0000

在我看来,你最好的办法就是启用windows更新,然后切换到让你下载更新但不自动安装的选项。这样,你可以得到你想要的东西,而不需要等待检查或后台文件下载。

现在,来回答为什么它很慢。我认为这只是因为windows更新是为了减少对用户的明显影响而建立的。它使用了BITS服务(后台智能传输服务)来检查和下载更新。

同样,这个服务的重点是以不影响用户的方式工作。

你可以考虑的是,让你自己设置一个WSUS服务器。这样你就可以像企业管理员一样拒绝更新,它可以应用或拒绝那些选择的更新到你所有的windows设备。这样一来,有选择地更新的苦差事就不那么麻烦了。

0
Advertisement
0
0
2018-05-08 16:10:00 +0000

只是想补充一个数据点。我最近要调出一台Vista电脑。我手动将Vista从SP1升级到了SP2,但检查更新要花很长时间。

我在网上搜索了一下,找到了一个解决方案,其中包括安装以下更新: 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=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个更新。我运行更新检查了10分钟,发现有200个更新。请记住,这是Vista系统的更新,但我想也许Windows 7也会有类似的情况。

-1
-1
-1
2015-10-24 20:34:13 +0000

我就遇到了这个问题,我的做法是让Windows Update在新安装的机器上第一次运行了一晚上。成功的技巧:

–进入能量选项,将待机时间设置为 “从不”

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

—也建议第一次做一个 “Windows更新需要更新一些组件……….. "的过程(相对于Windows 7的200多个更新来说,去的很快)

当所有的东西都更新正常后,你会发现安装了大量的补丁(大约200个)。

之后,剩下的Windows更新周期(搜索更新-安装-重启-搜索更新-安装-重启-搜索更新-安装-重启-搜索更新………..直到#更新为0)工作起来就快多了。

-1
Advertisement
-1
-1
2015-11-30 00:37:40 +0000

嘿,我想我以前的回答不是很好,但我给了很好的建议,如何让PC运行得更快。

-2
-2
-2
2015-03-16 06:31:45 +0000

不是哈希,是的,它检查的次数很多(和一些DLLs文件版本一样深)。不管你用什么系统都很慢,

作为解决方法,把它关掉,有一天或晚上不太需要系统的时候,打开它,强制检查更新,让它全部安装。

Advertisement