Я провел следующий тест. Я создал папку, содержащую 15000 файлов по 400 байтов, используя этот пакет:
@ECHO off
SET times=15000
FOR /L %%i IN (1,1,%times%) DO (
fsutil file createnew filename%%i.txt 400
)
затем я копирую его на свой компьютер с Windows, используя эту команду:
robocopy LargeNumberOfFiles\ LargeNumberOfFiles2\
После его завершения я вижу, что скорость передачи была 915810 байт / сек, это меньше 1 МБ / с. На копирование 7 МБ у меня ушло несколько секунд. Обратите внимание, что это очень медленно.
Я пробовал то же самое с папкой с одним файлом размером 50 Мбайт и скоростью передачи 1219512195 байт / сек. (да, ГБ / с) мгновенно.
Почему копирование большого количества файлов занимает так много времени - ресурсы в файловой системе Windows?
Обратите внимание, что я пытался сделать то же самое в системе Linux, которая работает на том же компьютере в виртуальной машине (проигрыватель vmware) с файловой системой ext3.
Я использую команду cp, и копирование происходит мгновенно!
Также обратите внимание на следующее:
Для выполнения ваших 15000 файлов требуется не менее 60000 транзакций HD:
Вероятно, вы тоже используете диск SATA (просто догадывайтесь), который не поддерживает очередь команд, а это означает, что диску придется обрабатывать все 60000 операций индивидуально. Высококачественные диски и массивы SCSI повысили бы производительность, поставив в очередь несколько операций в аналогичных местах перед их выполнением.
Для вашей единственной копии файла потребовалось как минимум 4 (хотя, вероятно, несколько больше, в зависимости от обстоятельств); так же, как прежде. Может быть больше 4, если есть фрагменты файла при операциях чтения или записи.
Пропускная способность измеряется не только в байтах в секунду, но также в IOps (по сути, операций в секунду). Вы ограничены последним из этих двух.
Наиболее вероятная причина заключается в том, что ваши системы Windows создают превью эскизов при копировании и вставке. Используйте инструмент командной строки, например Робокопиявместо этого.