web-dev-qa-db-ja.com

7-Zipを高速化する方法

私は通常、WinRAR over 7-Zipを使用していますが、これは圧縮の方が高速で効率が少し低いためです。さまざまなファイルタイプとサイズでいくつかのテストを行い、通常の圧縮と最高の圧縮での7-ZipとWinRARのデフォルト設定を比較しました。多くの場合、WinRARは50%高速で、一部は実際には100%高速でした。しかし、私はFOSSがもっと好きです。だからここに私の質問があります:

  1. 7-Zipを高速化する方法はありますか?少なくともWinRARの速度と同等にしたい
  2. WinRARのように7-Zipでリカバリセグメントを作成する方法はありますか?何も表示されませんでしたが、コマンドラインの可能性があります。
  3. WinRARと7-Zipをそれぞれの最新の安定したバージョン(7-Zipを含む4ドットの何か)を使用してテストしました。 9.xベータリリースは圧縮時に著しく高速ですか?

WinRARの同等の設定では、最低限の圧縮に下げるだけでなく、より速く話しています。

必要に応じて、クアッドコアIntel i7 720(1.6 GHz)/(2.8 GHz)と4 GB DDR3 RAM、64ビットバージョンの7-Zip、デュアルブートDebian x64 5.0.4およびWindows 7を使用しますホーム。

36
Kefka

7-Zip 9.13 beta を取得した場合、アーカイブタイプをLZMA2に変更できるため、メモリ使用量が驚異的に増加しますが、必要な数のスレッドを使用できます。

ベータ版をインストールし、アーカイブするものを右クリックして、7-Zipの接続メニューの下にある[アーカイブに追加...]をクリックすると、下のウィンドウのようなものが表示されます。左側の「圧縮方法」の下にある「LZMA2」を見つけると、少し下のオプションになるスレッドの数を変更できます。

これは、システムに合わせて調整することができ、通常の圧縮方法では最大2スレッドしか処理できないため、2コアを超えるプロセッサでパフォーマンスが大幅に向上する可能性があります。

画像のスレッド数選択ボックスの右側に表示される「/ 1」は、システム内のプロセッサの数であり、推奨されるスレッド数です。私のi7はクアッドコアプロセッサですが、ハイパースレッディング(これは実際にはここで役立ちます)を備えているため、「/ 8」と表示されます

alt text

36
Mokubai

各スレッドは同時に複数のファイルを圧縮するように見えるため、非常に大きなZipジョブのパフォーマンスを向上させるためにできる最善の方法は、スレッドを1に設定して、ハードドライブが一度に1つのファイルをシークするようにすることです。

7-Zipコマンドラインに-mmt=offを追加することにより、毎日のすべてのZipバックアップ手順のパフォーマンスを向上させます。複数の小さなファイルから作成された「ビジュアルSVNリポジトリ」のバックアップには、50〜60分かかりました。

-mmt=offを使用すると、常に5分もかからなくなります。また、この50分間は、ハードドライブのシークのため、すべてのサーバーが非常に低速でした。現在、これらの5分間はすべてが非常に高速のままです。

マシン上で行うすべてのことについて、ハードドライブのアクティビティは常にCPU容量よりも遅くなります。並列動作を無効にし、ハードドライブがファイルを1つずつ順番に読み取り(および書き込み)することを確認することで、ディスクのパフォーマンスを向上させることができます。

また、物理ヘッドは読み取りから書き込みに移動しないため、disk1から読み取り、Zipをdisk2に書き込むことをお勧めします。

マシンのパフォーマンスを維持しながら最大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つの異なる物理ディスクです

32

私の推測では、7-Zipの高速化は、圧縮/解凍アルゴリズムを書き直さないと不可能であり、速度を向上させる何らかの種類のTweakがあるかもしれませんが、おそらく10%または15%の増加にすぎず、大規模ではありませんあなたが探している50-100%の増加。

0
Joshkunz

この例のようなコードを使用するときにパフォーマンスを改善するためのもう1つの小さなトリック:

$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の大きなディレクトリと1 GBの大きなディレクトリが2つ以上あり、時間の節約が数分程度の場合を試してみました。

0
Max Monterumisi

私の会社では、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
Dominique

最近使用したすべての圧縮アルゴリズム(Zip、RAR、7z、tar/bzip2)は、CPUバウンドではなく、I/Oバウンドです。 MacラップトップでMenuMetersを見ると、一定のディスクアクティビティが表示されますが、CPUアクティビティは50%以下です。

したがって、圧縮/解凍を高速化する方法は、ディスクを高速化することです。これは常に可能であるとは限りません。

これに対する私の「解決策」は、何かを圧縮している間に別のことをすることです。 :-)

0
chrish