概要

ほとんどの圧縮アルゴリズムはシングルコア プロセッサ向けに設計されています。ただし、マルチコア 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

  
  

Aspose.Zip offers individual archive processing APIs for other popular development environments, listed below: