개요

대부분의 압축 알고리즘은 단일 코어 프로세서용으로 설계되었습니다. 그러나 멀티 코어 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 아카이브는 하나 이상의 파일이나 폴더를 압축하고 통합 컨테이너로 통합하는 목적으로 사용됩니다. .NET 에서는 ZipFile 클래스를 사용하여 ZIP 파일 및 압축 작업을 수행할 수 있습니다. 아카이빙의 주요 목적은 일반적으로 저장 또는 전송을 위한 파일 크기를 줄이는 동시에 보안 강화를 위한 암호화 조치를 통합하는 것입니다. 기존 파일 압축 도구 외에도 자동화된 압축/추출 기능은 다양한 데스크탑 및 웹 애플리케이션에서 애플리케이션을 찾아 파일 업로드, 다운로드, 공유 또는 암호화와 같은 작업을 용이하게 합니다.

7Z LZMA2 아카이브

7Z 형식의 압축 방법 중 하나는 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 설정은 멀티태스킹을 위해 선택한 전략을 나타냅니다. 다음은 세 가지 옵션 입니다.
ParallelCompressionMode.Never: 모든 항목 압축 순차적이다. 단 하나의 CPU 코어만 압축에 작동하고 압축된 데이터를 그대로 플러시합니다.
ParallelCompressionMode.Always: 항목 크기, 사용 가능한 메모리 및 기타 요인에 관계없이 여러 스레드의 항목을 강제로 압축합니다. 각 CPU 코어는 압축된 데이터를 RAM에 유지하면서 동시에 파일을 압축합니다. 항목이 압축되면 결과 스트림으로 플러시됩니다. RAM 양이 작고 일부 N 항목(여기서 N은 CPU 코어 수)의 전체 크기가 큰 경우 CLR에 사용 가능한 모든 RAM이 소진되고 OutOfMemoryExcepton이 발생할 수 있습니다.
ParallelCompressionMode.Auto: CPU 코어, 항목 크기, 사용 가능한 메모리를 추정하고 항목을 병렬 또는 순차적으로 압축할지 여부를 선택합니다. 이 모드에서는 일부 작은 항목은 병렬로 압축되고 다른 항목은 순차적으로 압축됩니다. LZMA 및 PPMd 항목은 메모리 소비가 높기 때문에 병렬로 압축되지 않습니다. 일반적으로 이 옵션을 사용하는 것이 안전합니다. Aspose.ZIP은 추정에 주의하고 대체 방법으로 순차 압축으로 전환합니다. 이 모드에는 ParallelOptions의 또 다른 속성인 AvailableMemorySize가 하나 더 있습니다. 다른 모드에서는 의미가 없습니다. 대략적으로 말하면 모든 CPU 코어로 항목을 압축하는 동안 할당된 메모리의 상한(MB)입니다. Aspose.ZIP은 해당 숫자를 사용하여 병렬로 압축해도 안전한 항목의 최대 크기를 추정합니다. 임계값을 초과하는 항목은 순차적으로 압축됩니다. AvailableMemorySize 는 양날의 검입니다. 항목이 너무 많아 너무 높게 설정하면 RAM이 소모될 수 있습니다. 스왑이 심하고 심지어 메모리 부족 예외가 발생할 수도 있습니다. 너무 낮게 설정하면 대부분의 항목이 속도 향상 없이 순차적으로 압축됩니다. 따라서 숙련된 사용자는 절충점을 고려하여 이를 할당할 수 있습니다.
귀하의 경우에 가장 적합한 설정이 무엇인지 결정하기 위해 일반적인 데이터에 대해 다양한 병렬 압축 모드를 사용해 보는 것이 좋습니다.

.NET API 기능에 대해 지원되는 기타 Aspose.ZIP

Aspose.ZIP C# 라이브러리를 사용하여 zip 파일 문서를 변환, 병합, 편집하고 아카이브에서 데이터를 추출하는 등의 작업을 수행하세요!

  

Support and Learning Resources

  
  

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