哪个更快,为什么:传输几个小文件或几个大文件?


17

我很快将拥有一个包含数千个文件的文件夹,每个文件的大小约为几KB。我将需要通过Windows网络将它们从一个UNC共享传输到另一个。总的来说,简单地整体复制文件是否更快,或者将它们压缩(例如,以最快的模式使用7zip)并发送一个或几个大文件会更快?还是实践上没有区别?

Answers:


37

由于协商传输的开销,传输单个大文件而不是传输许多小文件更快。协商是针对每个文件完成的,因此传输单个文件需要进行一次,传输n个文件意味着需要进行n次。

如果在传输之前先进行压缩,则可以节省很多时间。



4
考虑到压缩也将花费时间。如果您的数据无法压缩(例如JPEG,ZIP,JAR和其他已经压缩的格式),则应仅将它们压缩(或未压缩的ZIP)。这将节省CPU时间,以进行毫无意义的进一步压缩数据的尝试。
Daniel Schneller

这么多小文件会给您带来很多麻烦-在小数据包和每个小数据包之间进行SMB握手之间,压缩可能会节省60%的复制时间。
user2278,2009年

TAR的值为+1,因为您可以复制/提取部分存档。
克里斯蒂安·瓦特

这个答案是正确的,但在Windows 7(至少)有一个已知的错误,其中复制完全相同的一组对XP的文件是比在Windows 7速度更快: social.technet.microsoft.com/Forums/en-US/ w7itproperf / thread /…
tbone 2012年

5

乔恩·卡希尔(Jon Cahill)非常正确,单个文件会更快。但是,请记住,如果连接中存在任何不稳定的情况,则单个文件(或zip文件中的中型组)可能会更好,因为如果传输失败,您将不得不重新开始,而对于多个文件,您只需要重新执行上一个开始的文件


5
除非传输协议已恢复。
Unkwntech

1

与单个大文件相比,将许多小文件写入文件系统也将更加昂贵。它需要执行以下操作:

  • 检查文件名是否唯一
  • 写出文件表条目

随着您在目录中获得越来越多的文件,这可能会变得非常昂贵。这些步骤中的每一个都会增加复制过程的延迟,并使整个过程变慢。


1
我猜他仍将需要目标系统中的所有小文件,因此他可能稍后必须提取zip,即文件系统仍然必须完成工作。但是,发送大文件和解压缩仍比通过网络传输所有小文件要快得多。
BlaM

正如我在回答中所说,@ BlaM都归结为延迟。如果将网络延迟添加到每个CreateFile操作中,则总时间可能会更长。如果副本足够聪明,可以同时创建文件,那么它可能不会影响操作。
路加·奎纳

0

在此,相对于平均文件大小的平均数据包大小可能至关重要。有了许多小文件,您可能会发现自己发送了许多小数据包。微小的数据包仍然会产生TCP开销;这样一来,您的流量就会增加一倍。

现代系统甚至相对较旧的系统都可以通过单个TCP连接发送多个文件,从而避免了握手的开销。


0

就是我所发现的,但是如果您想进行更快的传输,请从本地计算机启动传输,然后复制到本地驱动器。

即将\ computer1 \ myshare复制到c:\ files \ myshare,不要使用第三台计算机,然后从\ computer1 \ myshare复制到\ computer2 \ mynewshare。


0

还值得记住的是,协议的选择会影响完成的总时间-例如,将FTP文件从一台主机传输到另一台主机,可能比使用Windows文件共享要快得多(当然,域权限之类的东西也可以)。丢失,但是在某些情况下,这是可以接受的折衷方案-毕竟,通过压缩/解压缩也会丢失这些内容)

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.