Назад | Перейти на главную страницу

Что быстрее и почему: передача нескольких небольших файлов или нескольких больших файлов?

Скоро у меня будет папка с тысячами файлов, каждый размером порядка нескольких КБ. Мне нужно будет перенести их по сети Windows с одного общего ресурса UNC на другой. В общем, быстрее ли просто скопировать файлы в массовом порядке или будет быстрее заархивировать их (например, с помощью 7zip в самом быстром режиме) и отправить один или несколько больших файлов? Или на практике разницы нет?

Быстрее передать один большой файл вместо множества маленьких файлов из-за накладных расходов на согласование передачи. Согласование выполняется для каждого файла, поэтому передача одного файла должна быть выполнена один раз, а передача n файлов означает, что это нужно сделать n раз.

Вы сэкономите много времени, если сделаете zip-архив перед переносом.

Джон Кэхилл очень прав, один файл будет быстрее. Однако стоит иметь в виду, что если есть какая-либо нестабильность в соединении, отдельные файлы (или группы среднего размера в zip-файлах) могут быть лучше, потому что, если передача не удалась, вам придется начать все сначала, тогда как с несколькими файлы, вам просто нужно будет переделать последний запущенный файл

Запись множества маленьких файлов в файловую систему также обходится дороже, чем запись одного большого файла. Он должен делать что-то вроде:

  • Убедитесь, что имя файла уникально
  • Запишите запись в таблице файлов

По мере того, как вы получаете все больше и больше файлов в каталоге, это может стать довольно дорогостоящим. И каждый из этих шагов может увеличить задержку в процессе копирования и замедлить весь процесс.

Здесь, вероятно, имеет решающее значение средний размер пакета по отношению к среднему размеру файла. С большим количеством маленьких файлов вы можете отправить много маленьких пакетов. Крошечные пакеты по-прежнему несут накладные расходы TCP; в результате вы можете удвоить объем трафика.

Современные системы, и даже относительно древние, могут отправлять несколько файлов по одному TCP-соединению, избегая затрат на это рукопожатие.

То, что я нашел, но если вы хотите более быструю передачу, инициируйте передачу с локального компьютера и скопируйте на локальный диск.

То есть скопируйте \ computer1 \ myshare в c: \ files \ myshare, не используйте третий компьютер и скопируйте из \ computer1 \ myshare в \ computer2 \ mynewshare.

Также стоит помнить, что выбор протокола влияет на общее время завершения - например, передача файлов FTP с одного хоста на другой может быть заметно быстрее, чем при использовании совместного использования файлов Windows (конечно, такие вещи, как разрешения домена и тому подобное, также потеряно, но в некоторых ситуациях это может быть приемлемым компромиссом - в конце концов, они также будут потеряны при сжатии / разархивировании)