Windows 文件复制对话框:为什么估计如此......糟糕?

Max*_*sky 43 windows file-transfer

估计

xkcd

我知道Windows复制对话框(在Windows XP中)首先将副本存储在内存中,并且在对话框关闭后仍在复制,所以时间是关闭的,但为什么是估计制作副本所需的时间如此不准确,即使已禁用内存复制(在 Vista 和 Windows 7 中)?好像太随意了!整个复制过程是如何工作的,为什么 Windows 不能正确估计它?

R-D*_*R-D 48

Raymond Chen 曾经写过一篇非常好的文章。基本上,对话只是猜测:)。

https://devblogs.microsoft.com/oldnewthing/20040106-00/?p=41193

“因为副本对话只是猜测。它无法预测未来,但它被迫尝试。而且在副本的最开始,当历史几乎没有时,预测可能非常糟糕。

这里有一个类比:假设有人告诉你,“我要数到 100,你需要不断地估计我什么时候能完成。” 他们开始说,“一、二、三……”。您注意到它们以大约每秒一个数字的速度运行,因此您估计为 100 秒。哦,哦,现在他们放慢了速度。“四…………五…………” 现在您必须将估计更改为 200 秒。现在他们加快了速度:“六七八九” 你必须再次更新你的估计。

现在有人只听你的估计而不是计算的人认为你不在乎。你的估计从 100 秒到 200 秒再到 50 秒;你怎么了?你为什么不能给出一个好的估计?

文件复制是一样的。shell 知道将要复制多少文件和多少字节,但它不知道硬盘驱动器、网络或互联网的速度有多快,所以它只需要猜测。如果复制吞吐量发生变化,估计需要更改以将新的传输速率考虑在内。”

  • 他的比喻可以用一个词来概括:统计学。 (8认同)

Sco*_*ain 33

我要数到 10,要数到 101....2....3....4需要多少个点?

5.6.7现在呢?您是否考虑了数字之间的所有过去点并对其求平均值,您是否只采用最后 4 个间隔并使用该平均值,您是否只查看最后一个间隔?

文件传输也有同样的问题。文件传输的速度不是恒定的,它的加速和减速基于很多因素。数字跳跃如此之大的原因是微软倾向于“只计算最后一个间隔”的一面。

频谱的那一边没有任何问题,它为您提供更准确的“每秒秒数”(实时一秒使计数器下降一秒)但这会导致计时器的总 ETA 跳动很多.

另一面的一个很好的例子是压缩时的7-Zip。如果压缩的速度在处理过程中下降,您可以看到 ETA 不会像文件传输 ETA 那样剧烈跳跃,但可能需要 2 到 3 秒的实际时间,然后计时器才会倒计时一秒(或者它甚至可能开始计数) ) 直到它稳定在新的速度。

  • 击败我为什么他们没有做指数或常规移动平均线...... (3认同)

jde*_*aan 29

简而言之:糟糕的算法和跳跃的估计实际上是一个实现弱点。

TeraCopy等其他工具做得更好。我认为不值得解释为什么他们的实施不好。他们会注意到这一点,并会改进。

什么难点:

  1. 必须考虑资源波动(主要是CPU/网络带宽/硬盘速度)
  2. 您需要通过预测行为来推断所需的时间(Windows 文件副本现在肯定做得不好)。
  3. 随着时间的推移对您的原始估计进行调整(我的意思是小调整,不像上面有趣的图片!)

为此,不仅字节量而且要创建的文件量都起作用。如果您有一百万个 1KB 文件或一千个 1MB 文件,情况将大不相同,因为前者具有创建许多文件的开销。根据所使用的文件系统,这可能比实际传输数据需要更多时间。

这个对话也让我发疯了好几次:

  • 在较旧的 WinNT 系统上,如果您有很多小文件要复制,它会为每个文件显示名称和漂亮的动画,从而减慢整个过程,几乎无法使用。

现代 Windows 复制的东西也好不到哪里去:

  • 为了计算要传输的数据量,它似乎首先进行查找(我认为它是这样做的),因此如果您选择许多目录,直到它有效地开始执行工作,它会花费很长时间。
  • 一些内置超时会弹劾要复制的大文件(在我的系统上 > 大约 60GB)。痛苦的是,它告诉您,在通过网络复制已经超过 30GB 之后,这会丢失带宽和时间,因为您必须从头开始!
  • 由于某种原因,将文件从一台计算机复制到另一台计算机非常慢。(我的意思是与可用的网络带宽相比,使用其他工具速度更快,因此它不是计算限制。)


Jou*_*eek 15

微软的 Raymond Chen从 WAAAAY 回来实际上有一个几乎规范的答案,并且有几个部分可以解决这个难题。

因为复制对话框只是猜测。它无法预测未来,但它被迫尝试。而在副本的最开始,当历史几乎没有时,预测可能非常糟糕。

首先,Windows 是在猜测。它知道有多少个文件,它们有多大,但每个文件的传输速率变化很大。在某些情况下,这取决于大小,甚至驱动器上的位置。随着时间的推移,它会根据当前和过去的条件调整其猜测,因此您在实际条件下估计的传输速度不准确。

  • 是的,聊天中有人也指出了这一点。我很想说这解决了用户盯着完成时间的问题,通过给他彩色图表来代替:) (2认同)

hai*_*img 12

这里的解释雷蒙德陈,微软首席软件设计工程师:

为什么复制对话框给出了如此可怕的估计?

因为复制对话框只是猜测。它无法预测未来,但它被迫尝试。而在副本的最开始,当历史几乎没有时,预测可能非常糟糕。

这里有一个类比:假设有人告诉你,“我要数到 100,你需要不断地估计我什么时候能完成。” 他们开始说,“一、二、三……”。您注意到它们以大约每秒一个数字的速度运行,因此您估计为 100 秒。哦,哦,现在他们放慢了速度。“四…………五…………” 现在您必须将估计更改为 200 秒。现在他们加快了速度:“六七八九” 你必须再次更新你的估计。

上面引用的博客文章对此问题进行了长时间的讨论,并附有一些有趣的评论。

Raymond Chen 是一个传奇人物,“微软的 Chuck Norris”,我想你不会得到更权威的答案。我敢肯定他至少看过有问题的代码。


nit*_*k01 10

显而易见的原因是传输速度随时间变化,平均值也是如此,预测也是如此。为了向非技术朋友解释这一点,我使用了一个涉及乘飞机旅行的类比。你要飞越大西洋。当您乘坐出租车抵达出发机场时,您的预计到达时间约为两个月。当您在到达机场下机时,根据您目前的平均速度,您将在 5 秒内到达您朋友的家。

但是您需要了解速度实际上可以变化多少,即使在看似可预测的情况下,例如在同一磁盘内或两个本地磁盘之间复制文件。我喜欢 Windows 8 中的一项新功能是,如果您单击“更多详细信息”,则可以绘制随时间变化的速度图表。如果您无法访问 Windows 8 计算机,请搜索Windows 8 复制对话框的图像以获取大量示例。它们中的许多都相当平坦,但其中许多也令人不安地颠簸,以至于您怀疑硬盘驱动器是否真的健康,当它下降到零时。

其中一些颠簸可能是由于文件大小的变化 - 较小的字段会产生更多的访问,这会减慢速度,尤其是在必须通过移动读取头来寻找的机械硬盘驱动器上 - 但有些它可能只是一个便宜的驱动器轻轻一碰就会停止,以防止损坏盘片。

ETA 预测算法有好有坏,但为了准确预测,计算机必须无所不知。试图使算法“智能”的风险在于它可能会产生新的、不可预见的情况,在这种情况下它甚至会出现更可笑的错误。

Windows 8 复制对话框

Windows 8 复制对话框 2