概要
ほとんどの圧縮アルゴリズムはシングルコア プロセッサ向けに設計されています。ただし、マルチコア CPU の時代では、すべての CPU コアを利用してアーカイブの作成を高速化することが有益です。 Aspose.ZIP は、一部のアーカイブ形式に対してこの機能を提供します。BZIP2、LZIP、XZ アーカイブでの並列メソッド
これらのアルゴリズムのブロック特性により、並列化が可能です。プログラム レベルでは、これらのアーカイブはマルチコア圧縮という一般的なアプローチを使用しています。ユーザーは、 CompressionThreads プロパティを介してスレッド数を設定できます。したがって、このプロパティが複数の場合は、複数の CPU コアが使用されます。
Sample 1 – Parallel compression to BZIP2
using (Bzip2Archive archive = new Bzip2Archive())
{
archive.SetSource("data.bin");
archive.Save("archive.bz2", new Bzip2SaveOptions() { CompressionThreads = 4 });
}
Sample 2 - Parallel compression to LZIP
var settings = new LzipArchiveSettings(16777216) { CompressionThreads = 4 }
using (LzipArchive archive = new LzipArchive(settings))
{
archive.SetSource("data.bin");
archive.Save("archive.lz");
}
Sample 3 - Parallel compression to XZ
using (Bzip2Archive archive = new Bzip2Archive())
{
archive.SetSource("data.bin");
archive.Save("archive.bz2", new Bzip2SaveOptions() { CompressionThreads = 4 });
}
.NET でフォルダーを圧縮する方法
ZIP アーカイブは、1 つまたは複数のファイルまたはフォルダーを圧縮して、統一されたコンテナーに統合するという目的を果たします。 .NET では、ZipFile クラスを使用して ZIP ファイルと圧縮を操作できます。 通常、アーカイブの主な目的は、セキュリティを強化するための暗号化手段を組み込みながら、保存または送信用のファイル サイズを小さくすることです。従来のファイル圧縮ツールを超えて、自動圧縮/抽出機能はさまざまなデスクトップおよび Web アプリケーションに適用され、ファイルのアップロード、ダウンロード、共有、暗号化などのタスクを容易にします。
7Z LZMA2 アーカイブ
7Z 形式の圧縮方法の 1 つは LZMA2 で、複数のスレッドで圧縮できます。以前の種類のアーカイブと同様に、CompressionThreads プロパティを介してスレッド数を設定できます。
Sample 1 – Parallel compression to 7Z LZMA2
var settings = new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(){ CompressionThreads = 4 });
using (SevenZipArchive archive = new SevenZipArchive(settings))
{
archive.CreateEntry("first.bin", "data.bin");
archive.Save("result.7z");
}
ZIP アーカイブの並列メソッド
以前のアーカイブ クラスでは、並列化はブロック レベルまたはアルゴリズム レベルで適用されていました。 ZIP アーカイブの場合は、エントリーレベルで可能です。これを行うには、アーカイブ保存時に ParallelOptions をインスタンス化します。
Sample 1 – Parallel compression to zip
using (Archive archive = new Archive())
{
archive.CreateEntries(@"C:\Data");
archive.Save(zipFile, new ArchiveSaveOptions()
{
ParallelOptions = new ParallelOptions()
{ ParallelCompressInMemory = ParallelCompressionMode.Auto }
});
}
Parallel-Compress-In-Memory セットアップ戦略はマルチタスクに使用されます
ParallelCompressInMemory を設定すると、マルチタスクに選択する戦略が示されます。 ここに 3 つの オプション があります:ParallelCompressionMode.Never: すべてのエントリの圧縮はシーケンシャルです。 1 つの CPU コアのみが圧縮を処理し、圧縮データが到着するとフラッシュします。
ParallelCompressionMode.Always: エントリ サイズ、利用可能なメモリ、その他の要因に関係なく、異なるスレッドでエントリの圧縮を強制します。各 CPU コアは、圧縮データを RAM に保持しながらファイルを同時に圧縮します。エントリが圧縮されると、結果ストリームにフラッシュされます。 RAM の量が少なく、いくつかの N エントリ (N は CPU コアの数) の合計サイズが大きい場合、CLR に使用可能なすべての RAM が枯渇し、OutOfMemoryExcepton が発生する可能性があります。
ParallelCompressionMode.Auto: CPU コア、エントリのサイズ、利用可能なメモリを推定し、エントリを並列で圧縮するか順次圧縮するかを選択します。このモードでは、いくつかの小さなエントリは並行して圧縮され、他のエントリは順次圧縮されます。 LZMA および PPMd エントリは、メモリ消費量が多いため、並行して圧縮されません。通常、このオプションを選択しても安全です。 Aspose.ZIP は推定に慎重であり、フォールバックとして逐次圧縮に切り替えます。このモードには ParallelOptions のプロパティがもう 1 つあり、AvailableMemorySize です。他のモードでは無意味です。大まかに言うと、すべての CPU コアでエントリを圧縮する際に割り当てられるメモリの上限 (メガバイト単位) です。 Aspose.ZIP は、その数値を使用して、並列圧縮しても安全なエントリの最大サイズを推定します。しきい値を超えるエントリは順次圧縮されます。 AvailableMemorySize は諸刃の剣です。巨大なエントリで設定値が高すぎると、RAM が枯渇する可能性があります。スワップが激しく、メモリ不足例外が発生する可能性もあります。設定が低すぎると、ほとんどのエントリは、それほど高速化されずに順次圧縮されます。そのため、洗練されたユーザーは、トレードオフを考慮してこれを割り当てることができます。
一般的なデータに対してさまざまな並列圧縮モードを試して、ケースに最適な設定を決定することをお勧めします。
サポートされているその他の Aspose.ZIP for .NET API 機能
Aspose.ZIP C# ライブラリを使用して、zip ファイル ドキュメントの変換、結合、編集、アーカイブからのデータの抽出などを行います。
Support and Learning Resources
- Learning Resources
- Documentation
- Source Code
- API References
- Tutorial Videos
- Product Support
- Free Support
- Paid Support
- Blog
- Release Notes
- Why Aspose.ZIP for .NET?
- Customers List
- Success Stories