如何使7-Zip更快


35

我通常在7-Zip上使用WinRAR只是因为它速度更快,压缩效率也略低。我对不同的文件类型和大小进行了一些测试,比较了7-Zip和WinRAR在默认压缩和最佳压缩下的默认设置,在很多情况下,WinRAR快50%,在某些情况下实际上快100%。但是,我更喜欢FOSS。所以这是我的问题:

  1. 有办法提高7-Zip速度吗?我希望它至少可以与WinRAR的速度相提并论
  2. 有没有办法像在WinRAR中那样在7-Zip中创建恢复段?我什么都没看到,但我想可能是命令行问题。
  3. 我使用最新的稳定版(带有7-Zip的4-dot-something)测试了WinRAR和7-Zip。9.x beta版本在压缩时是否明显更快?

我说的是在WinRAR中的类似设置下更快,而不仅仅是降低到最低压缩率。

如果有问题,我将使用具有4 GB DDR3 RAM的四核Intel i7 720(1.6 GHz)/(2.8 GHz),64位版本的7-Zip,双引导Debian x64 5.0.4和Windows 7家。


1
关于#2-7-zip当前没有任何类型的“恢复记录”或“ ecc”功能。您将需要第三方软件,例如QuickPar / MultiPar或ICE ECC,但它不属于存档的一部分。
afrazier 2010年

Answers:


36

如果您获得7-Zip 9.13 Beta,则可以将存档类型更改为LZMA2,从而可以使用任意多个线程,尽管内存使用量显着增加。

安装测试版,右键单击要存档的内容,然后在7压缩接触菜单下,单击“添加到存档...”,您将获得类似于以下窗口的内容。在“压缩方法”的左侧,您应该找到“ LZMA2”,它将允许您更改线程数,这是一个更进一步的选择。

由于可以更好地调整到您的系统,这有可能极大地提高> 2核处理器的性能,并且常规压缩方法最多只能处理2个线程。

在图像中的线程数选择框右侧看到的“ / 1”是系统中的处理器数,因此是建议的线程数。我的i7是四核处理器,但是具有超线程(实际上在这里确实有帮助),因此显示为“ / 8”

替代文字


Anandtech.com一直在使用7-Zip来帮助确定多核和多线程CPU的性能改进基准,否则这在该代大多数软件中将更加理论化。
kmarsh 2010年

5
启用LZMA2的命令行arg是什么?
djangofan 2012年

@Monkubai:在我办公室的i7 4c-8t中,无论设置如何,我都无法在LZMA2模式下以7-zip运行完整的8核。唯一允许它运行所有8个线程的方法是使用BZip2算法(从下拉菜单中选择),该算法具有较低的压缩率。
爱德华

@Edward您使用的是什么版本?在9.20上,如果我从该列表中选择lzma2,则可以使用最多8个内核。
Mokubai

2
@Mokubai 9.20正式版。图形UI没什么问题,它仍然在设置面板中显示8/8 cores参数,但处理时实际上仅使用<20%cpu。我在SU上针对此问题进行了快速研究,但尚未弄清楚造成这种奇怪情况的原因。只要知道如果我使用带有-m0 = lzma2 -mmt = 8这样的参数的命令行7z,那么压缩将占用约100%的CPU,但是一旦我切换到GUI,它就会返回单线程模式或类似的方式...以非常低效的方式使用CPU(<20%)。
爱德华

31

由于每个线程似乎同时压缩多个文件,因此提高超大型zip作业性能的最佳方法是将线程设置为1,以确保硬盘驱动器一次查找一个文件。

通过添加-mmt=off到7-zip命令行,我们提高了所有日常zip备份过程的性能。由多个小文件组成的“可视SVN存储库”备份耗时50至60分钟。

有了-mmt=off,我们现在总是能在不到五分钟的时间内完成!而且,在这50分钟内,由于寻找硬盘驱动器,我们所有的服务器都非常慢。现在,在这五分钟内,一切仍然非常快。

对于您在计算机上执行的所有操作,硬盘驱动器活动始终会比CPU容量慢。您可以通过禁用并行活动并确保硬盘驱动器逐个串行读取(和写入)文件来提高磁盘性能。

另外,最好从磁盘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个不同的物理磁盘


5
令人惊讶的是,这与建议的答案完全相反,但实际上是正确的。通过更改为使用单个线程,我使存档操作从12小时减少到2小时。
N琼斯

2
真正。这也对我有用。可能是有道理的,因为他正在使用-mx=1(几乎没有压缩)。如果您不进行压缩,则大部分工作将由HDD完成。如果设置-mx=9,处理器确实需要工作来压缩文件。我需要尝试一下,但是取决于瓶颈是什么(HDD或CPU),它可能是好是坏。
Diego Jancic

9
这个答案是针对老化技术的。尝试使用SSD可能没有用,因为查找时间要短得多。随机IOPS不太可能成为瓶颈。您的情况非常特殊,因为您执行的压缩很少。基本上,您正在复制文件。是的,旋转高清硬盘上的顺序访问显然是赢家。典型的7zip用例可能会受CPU约束,而不是IO约束。为此,必须使用所有CPU内核。但是对于那些处于类似情况的人,您的建议非常有价值。
dss539,2015年

1
-mmt=off即使使用,使用速度也更快-m0=lzma2 -mx=5。(不包括-mmt=off真实1m27.811s,用户2m4.976s,sys 0m3.729s。使用-mmt=off真实1m18.896s,用户1m17.160s,sys 0m1.661s
ostrokach

对于我来说,将线程减少到1似乎要慢得多。使用1个线程处理20 GB的文件时,它的处理速度约为2 MB /秒。它具有16个线程,其处理速度约为16 MB /秒。
Lightyear Buzz

0

我最近使用的所有压缩算法(ZIP,RAR,7z,tar / bzip2)都是I / O绑定的,而不是CPU绑定的。在Mac笔记本电脑上观看MenuMeters可以看到恒定的磁盘活动,但是CPU活动只有50%或更少。

因此,加速压缩/解压缩的方法就是加速磁盘。这并不总是可能的。

我对此的“解决方案”是在压缩某些内容时只做其他事情。:-)


2
如果磁盘I / O是Matt的问题,那意味着WinRAR能够以某种方式比他系统上的7Zip更快地读取磁盘...在我看来这不太可能。
foraidt

1
WinRAR可能会使用更智能的磁盘I / O。我知道Info-ZIP的zip被很小的I / O缓冲区所阻碍。但是,是的,压缩算法之间可能有所不同。
10年

即使在快速模式下,7z当然也不受I / O限制。
Sarge Borsch 2014年

您描述的大多数方法都不是并行压缩的,因此仅使用1个CPU内核,因此在2核计算机上,您获得50%的压缩率。恐怕这是Mac上的CPU绑定,而不是IO上的绑定,大多数Mac的SSD并没有真正受到磁盘搜寻的影响。如果您选择7z,则可以并行压缩。(tar,zip,bzip,gzip,xs通常不会)
Martin

0

在我的公司中,我们正在使用7-zip(4.52 beta)的旧版本,并且正在运行以下命令:

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

这可以正常工作,但是在刚升级到较新的版本16.04(32位)之后,性能已大大降低,因此我决定降级到旧版本。


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都会创建一个与原始文件一样大(或更大)的临时文件,然后在其中添加新文件。我尝试了以下情况,其中有两个或多个目录,一个大一些MB,一个大许多GB,节省的时间大约是几分钟。


我相信这仅适用于将文件添加到现有存档中的情况。一次添加多个文件时,将仅使用一个临时文件。创建新档案时,根本不会使用临时文件。
Daniel B

-1

我的猜测是,如果不重新编写其压缩/解压缩算法,则不可能加快7-Zip的速度,可能会有某种调整来提高速度,但可能只会提高10%或15%,而不是大幅度提高您所寻找的增加50-100%。


6
完全不对。您只需将默认设置更改为7-zip,即可大大提高其速度。实际上,默认设置已针对最小文件大小(和最慢的压缩算法-BZip2)进行了调整。将其更改为ZIP并将LZMA压缩设置为“最快”可以大大提高速度。
NickG
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.