为什么磁盘清理需要这么多时间和cpu?


29

只是一个好奇的问题。磁盘清理已经花了我100%的核心之一,并且已经持续了很长时间。似乎要花费很多时间,尤其是在Windows Update Cleanup上。

无法完全理解为什么删除文件应该是一项如此繁重的活动。特别是因为它已经花费了很多时间来计算可以删除的内容。

为什么磁盘清理需要这么多时间和cpu?如此密集的工作是什么?

四个核心中的两个已用尽

Answers:


20

Windows通过删除无法卸载且未用于diff的替换更新广告压缩文件来压缩WinSxS文件夹。这需要大量的CPU能力,这就是为什么您看到CPU使用率很高的原因。

您可以使用xperf / WPA分析CPU使用率以进行验证。


压缩最旧的文件(最近没有打开的文件)时,它是否还计算节省的空间?
贾斯汀·戈德堡

不错的视频!肯定会检查该工具的:D
Svish 2014年

@Svish您验证了吗?问题得到了回答吗?
magicandre1981

4

我可以确认Windows Updates Cleanup占用了将近100%的CPU使用率,这全都涉及WinSxS压缩和更新的重新集成:

Windows清理100%CPU使用率

我在Windows安装后第一次开始清理,花了2个小时才完成50%。从图中可以看到,首先从磁盘读取小文件(第二张图),然后是100%CPU使用率进行压缩,依此类推。


2

为了解决这个问题,我在不变的虚拟机上完成了以下步骤:

  1. 引导SystemRescueCD并挂载Windows分区
  2. 将磁盘上的所有文件列出到日志文件中(不到一分钟)
  3. 重新启动到Windows
  4. cleanmgr做其工作,并注意时间(超过八小时)
  5. 重新启动到SystemRescueCD并挂载Windows分区
  6. 将磁盘上的所有文件列出到另一个日志文件中(不到一分钟)
  7. 重置不可变虚拟机
  8. 重新启动到Windows
  9. 执行FOR / F ...以在管理员命令提示符(cmd)中删除此类文件,并记下时间(少于五分钟)

请注意,我重新启动到Linux SystemRescueCd只是为了能够列出所有文件,也包括Window查找的文件,并尽可能快地列出这样的文件(不检查ACL等)。

另外请注意,cleanmgr我只计算搜索结束后的时间(搜索本身也花费了六个多小时)。

因此,删除文件并不是一件cleanmgr容易的事(删除本身仅需要五分钟,但需要八个小时以上)。

由于主机是Linux,因此删除自身的速度可能会如此之快,这是因为Linux将所有写入高速缓存的文件写入了虚拟磁盘(24GiB)上的固定大小文件,并且因为我拥有64GiB RAM,我让Windows 16GiB既不需要使用SWAP,也不需要PAGEFILE.SYS; 还有,Linux可以将完整文件保存在RAM上(我在RAM上对该文件进行了测试,删除时间做了很多,但是cleanmgr时间没有减少)。

是的,如果我将虚拟磁盘完全放在RAM上,cleanmgr时间不会减少,但是如果我手动删除文件,则时间会减少一点(当您拥有64GiB RAM时,Linux写缓存非常有用)。

我的测试配置:

  • 主机:Linux 64bits发行版,其硬件主要是具有64GiB RAM的AMD Deca Core 5GHz和具有两个WD VelociRaptor HDD的Sata Raid0控制器(能够维持接近1GiB / s的组合安全写入速度和4K的随机写入速度) 300MiB / s); 成本>一万欧元
  • 来宾:具有16GiB ram和24GiB虚拟磁盘的Windows 10 Home

Test1:在物理硬盘上具有24GiB虚拟磁盘Test2:在Linux主机RAM上具有24GiB虚拟磁盘

恐怕cleanmgr每个删除的文件都会在Windows注册表上执行某些操作(访问注册表非常少)。

我有的显示器:

  • Linux主机和Windows Guest上的CPU使用率(大多数时间在0%到1%之间,峰值为5%,没有更多)
  • Linux主机上的HDD使用率(cleanmgr工作时接近0%,派生率为2%),Linux磁盘缓存确实非常棒,避免了将dato发送到实际磁盘
  • Windows guest虚拟机上的HDD使用情况(工作时大多数时间在2%到15%之间cleanmgr,峰值为28%)

显然cleanmgr做很多无法检测的工作,也许是睡觉时间?也许不是,如果它正在访问注册表,则Windows监视器不计入该CPU的使用,不使用该硬盘上的HDD(注册表在RAM上),等等,并且每次访问注册表都可能花费一秒钟以上的时间。 。尝试通过自己的程序访问注册表,方法是打开注册表,然后每次操作将其关闭,而不是打开HK *,这是一个很大的区别。

因此,如果cleanmgr对每个文件都这样做:

  1. 公开注册香港*
  2. 咨询任何需求和/或在注册表上写一些东西
  3. 关闭注册表HK *

每次操作最多可能需要2到3秒钟,如果每个文件执行一次操作,则每千个文件可能要花费近一小时的时间...我的文件数仅比40000个文件多一点,因此40000个文件/ 8小时正在每1.3秒处理一个文件...在另一边,在脚本上将它们删除(在知道最常见的情况下)花了不到五分钟,即每秒删除约133个...区别。

因此,确定cleanmgr时间不是由deletionit自身引起的!它还在做什么?请M $提高速度!


1
不是原始问题的答案。如果您有新问题,请提出自己的问题(如果有帮助,请参考此问题)。
DavidPostill

为什么不使用进程监视器(docs.microsoft.com/en-us/sysinternals/downloads/procmon)分析Windows注册表等的动作?
Cyber​​nard '18

* I m mutable sp。
StingyJack

2

缓解此问题并加快“磁盘清理”的“ Windows Update清理”阶段的一种方法是,在所谓的“清理”活动期间,为TiWorker.exe进程临时设置更高的优先级。

任务管理器的 “详细信息”窗格中,找到TiWorker.exe并右键单击以显示一个弹出菜单。对于“设置优先级”,选择“高于正常”。对我来说,这增加了TiWorkerCPU的活动-从平均16%左右增加到25%的全部潜力(在四核计算机上)。

在此处输入图片说明

除了提供极小的加速效果(可能会有良好的成就感)之外,这几乎无济于事,因为“ Windows Update Cleanup”显然是以某种未知原因进行编码的方式进行逐个文件编码,使整体工作非常困难。

而且,一定要知道该过程很可能没有挂起,并且确实有一天会完成。为了验证这一点(并在这个烦人的等待时间内进一步分散您的注意力),您可以检查Resource Monitor的“ Disk Activity”部分(运行“ resmon.exe”)。


很好加速!
主观主义者

1

删除20个大小为5mb的文件比删除10个大小为64mb的文件要花费更多的时间。这是因为当系统删除文件时,它并不会真正删除它们(因为驱动器上的空白空间可以由“噪声”位组成),而只是用乱码覆盖表示“文件从此处开始”的前部,然后以后,当您要使用该空间时,它将很高兴将其覆盖。实际上,删除与否则写入相同。

磁盘清理是指清理的东西通常是很多小文件(互联网cookie,临时文件等)。这样一来,与将其他许多事物写入磁盘相比,它对磁盘的写入要多得多,并且由于将卷写入磁盘,因此可能花费与安装新事物一样多的时间。


最初的问题专门询问有关磁盘清理的问题。
liljoshu

0

另一个警告词:占用时间的一部分是,在清理WinSxS时,磁盘清理首先要解压缩很多文件。因此,清理的第一部分实际上增加了磁盘使用量!


-2

加快此过程的另一种方法是运行“磁盘清理”大约5分钟。停止它,然后重新启动它,它会变得轻而易举!此外,事先对碎片/优化HDD / SSD进行整理可以加快处理速度,只记得在清理后再次对其进行碎片整理/优化。


请不要对您的SSD进行碎片整理,因为它会耗尽读写周期,并且几乎没有收益。
Nordlys Jeger '18

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.