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

我很快就会拥有一个文件夹,数千个文件,每个文件的大小只有几KB。 我将需要通过Windowsnetworking从一个UNC共享转移到另一个。 一般来说,简单地复制整个文件会更快吗?还是更快地将它们压缩(例如,以最快的模式使用7zip)并发送一个或几个大文件? 或者在实践中没有区别?

由于协商传输的开销,传输单个大文件而不是大量小文件的速度更快。 协商是为每个文件完成的,所以传送一个文件需要一次完成,传送n个文件意味着需要完成n次。

如果您在传输之前先压缩,您将节省大量时间。

Jon Cahill非常正确,单个文件会更快。 但值得记住的是,如果连接中存在任何不稳定的情况,单个文件(或者zip文件中的中等大小)可能会更好,因为如果传输失败,您将不得不重新开始,而使用多个文件,你将不得不重新开始最后一个文件

写入文件系统的许多小文件的成本也比单个大文件的成本要高。 它需要做的事情如:

  • 检查文件名是唯一的
  • 写出文件表项

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

平均数据包大小相对于平均文件大小在这里可能是关键的。 有了很多小文件,你可能会发现自己发送了很多小包。 小数据包仍然会产生TCP开销; 结果你可能会把stream量增加一倍。

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

正是我发现的,但如果你想更快的传输启动本地计算机的传输,并复制到本地驱动器。

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

同样值得一提的是,协议的select会影响完成的总体时间 – 例如,从一台主机到另一台主机的FTP文件可能比使用Windows文件共享快得多(当然,域权限等也是如此失去了,但在某些情况下,这可以是一个可以接受的权衡 – 毕竟,这些也将通过压缩/解压缩丢失)