30

Обычно я использую WinRAR поверх 7-Zip просто потому, что он быстрее и только немного менее эффективен при сжатии. Я провел несколько тестов для файлов разных типов и размеров, сравнивая настройки по умолчанию для 7-Zip и WinRAR с их обычным сжатием и наилучшим сжатием, и во многих случаях WinRAR работал на 50% быстрее, а в некоторых - на самом деле на 100% быстрее. Но мне больше нравится FOSS. Итак, вот мои вопросы:

  1. Есть ли способ ускорить 7-Zip? Я хотел бы, чтобы это было по крайней мере на одном уровне со скоростью WinRAR
  2. Есть ли способ сделать сегменты восстановления в 7-Zip, как вы можете в WinRAR? Я не видел ничего, но я думаю, что это может быть из командной строки.
  3. Я протестировал WinRAR и 7-Zip, используя последнюю стабильную версию каждого (4-точечный что-то с 7-Zip). Бета-версия 9.x заметно быстрее при сжатии?

Я говорю о более быстром при сопоставимой настройке в WinRAR, а не просто о минимальном сжатии.

Если это имеет значение, я использую четырехъядерный процессор Intel i7 720 (1,6 ГГц)/(2,8 ГГц) с 4 ГБ оперативной памяти DDR3, а также 64-разрядную версию 7-Zip и двухзагрузочную версию Debian x64 5.0.4 и Windows 7 Главная.

6 ответов6

32

Если вы получите бета-версию 7-Zip 9.13, вы можете изменить тип архива на LZMA2 и, таким образом, сможете использовать столько потоков, сколько захотите, хотя использование памяти феноменально возрастает.

Установите бета-версию, щелкните правой кнопкой мыши материал, который вы хотите заархивировать, затем в контекстном меню 7-Zip нажмите «Добавить в архив ...», и вы получите нечто похожее на окно ниже. С левой стороны в разделе "Метод сжатия" вы найдете "LZMA2", который позволит вам изменить количество потоков, что будет опцией чуть ниже.

Это может значительно увеличить производительность на> двухядерных процессорах, так как его можно лучше настроить на вашу систему, а обычный метод сжатия может обрабатывать максимум 2 потока.

«/1», которое вы видите справа от поля выбора количества потоков на изображении, - это количество процессоров в вашей системе и, следовательно, рекомендуемое количество потоков. Мой i7 является четырехъядерным процессором, но имеет гиперпоточность (что на самом деле помогает здесь, кстати), поэтому он отображается как "/8"

альтернативный текст

28

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

Мы повышаем производительность всех наших ежедневных процедур резервного копирования в zip- архивы, добавляя -mmt=off в командную строку 7-zip. Наша резервная копия "визуального репозитория SVN", которая состоит из нескольких небольших файлов, занимала от 50 до 60 минут.

С -mmt=off мы теперь всегда делаем это менее чем за пять минут! И в течение этих 50 минут все наши серверы работали очень медленно из-за поиска жестких дисков. Теперь все остается очень быстро в течение этих пяти минут.

Для всего, что вы делаете на компьютере, активность жесткого диска всегда будет ниже, чем ваш процессор. Вы можете повысить производительность диска, отключив параллельные операции и убедившись, что жесткий диск последовательно читает (и записывает) ваши файлы.

Также лучше читать с диска 1 и записывать ZIP на диск 2, так как физическая голова не переходит от чтения к записи.

Пример строки, чтобы получить максимальную скорость ZIP при сохранении производительности вашего аппарата:

start "" /wait /belownormal c:\Progra~1\7-Zip\7z.exe a -tzip -mx=1 -mmt=off t:\backup.zip d:\folderToBackup\*

D: и T: 2 разных физических диска

0

Я предполагаю, что ускорение 7-Zip невозможно без переписывания его алгоритмов сжатия / распаковки, может быть какая-то подстройка, которая увеличивает скорость, но это, вероятно, будет только на 10 или 15% больше, а не массовым Увеличение на 50-100%, что вы ищете.

0

Еще один маленький трюк для повышения производительности при использовании кода, подобного этому примеру:

$7zip = "$env:ProgramFiles\7-Zip\7z.exe"
set-alias sz $7zip
$FileZip = "$DiscoZip\temp\$TempFile"
foreach ($DirData in $ListDir) { $out7z = (sz a $FileZip $DirData) }

если возможно, в массиве $ ListDir перечислены каталоги по размеру, от самого маленького до самого большого. Это происходит потому, что в каждом цикле foreach 7zip создает временный файл, который больше (или больше) исходного, а затем добавляет в него новый файл. Я пробовал в случаях, когда есть два или более каталогов размером несколько МБ и один большой много ГБ, и экономия времени составляет порядка нескольких минут.

0

В моей компании мы работаем со старой версией 7-zip (бета-версия 4.52) и выполняем следующую команду:

"C:\Program Files\7-Zip\7z.exe" a -mx7 -mmt -sfx -xr!*.<exclude_extension> <destination>.exe <source_directory>\* 

Это работает нормально, но после обновления до новой версии 16.04 (32-разрядной) производительность сильно упала, поэтому я решил вернуться к старой версии.

0

Все алгоритмы сжатия, которые я использовал недавно (ZIP, RAR, 7z, tar/bzip2), связаны с вводом / выводом, а не с процессором. Наблюдение за MenuMeters на моем ноутбуке Mac показывает постоянную активность диска, но только 50% или меньше активности процессора.

Таким образом, способ ускорить сжатие / распаковку состоит в том, чтобы ускорить ваш диск. Это не всегда возможно.

Мое "решение" этого состоит в том, чтобы просто сделать что-то еще, пока я что-то сжимаю. :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .