ZIP 아카이브의 병렬 구성
개요
Aspose.ZIP API는 ZIP 아카이브를 구성하는 기능을 제공합니다. 이러한 아카이브의 항목은 독립적으로 압축될 수 있으므로 아카이브 생성을 어느 정도 병렬화하는 것이 가능합니다.
ZIP 멀티스레드: 설명
ParallelOptions을 사용하여 여러 CPU 코어를 사용하여 아카이브를 준비해야 함을 나타냅니다.
ParallelCompressInMemory 설정은 멀티태스킹을 위해 선택하는 전략을 나타냅니다. 다음은 세 가지 옵션입니다.
ParallelCompressionMode.Never
: 모든 항목이 순차적으로 압축됩니다. 하나의 CPU 코어만 압축에 작동하고 압축된 데이터를 그대로 플러시합니다.ParallelCompressionMode.Always
: 항목 크기, 사용 가능한 메모리 및 기타 요인에 관계없이 서로 다른 스레드의 항목을 강제로 압축합니다. 각 CPU 코어는 압축된 데이터를 RAM에 유지하면서 동시에 파일을 압축합니다. 항목이 압축되면 결과 스트림으로 플러시됩니다. RAM 양이 작고 일부 N 항목(여기서 N은 CPU 코어 수)의 전체 크기가 큰 경우 CLR에 사용 가능한 모든 RAM이 소진되고 OutOfMemoryExcepton이 발생할 수 있습니다.ParallelCompressionMode.Auto
: 지능형 모드. CPU 코어, 항목 크기, 사용 가능한 메모리를 추정하고 항목을 병렬 또는 순차적으로 압축할지 여부를 선택합니다. 이 모드에서는 일부 작은 항목은 병렬로 압축되고 다른 항목은 순차적으로 압축됩니다. LZMA 항목은 메모리 소비가 높기 때문에 병렬로 압축되지 않습니다. 일반적으로 이 옵션을 사용하는 것이 안전합니다. Aspose.ZIP은 추정에 주의하고 폴백으로 순차 압축으로 전환합니다. 이 모드에는 ParallelOptions의 속성인 AvailableMemorySize가 하나 더 있습니다. 다른 모드에서는 의미가 없습니다. 대략적으로 말하면 모든 CPU 코어로 항목을 압축하는 동안 할당된 메모리의 상한(MB)입니다. Aspose.ZIP은 해당 숫자를 사용하여 병렬로 압축해도 안전한 항목의 최대 크기를 추정합니다. 임계값을 초과하는 항목은 순차적으로 압축됩니다. AvailableMemorySize는 양날의 검입니다. 항목이 너무 많아 너무 높게 설정하면 RAM 소모, 강렬한 스왑이 발생하고 심지어 메모리 부족 예외가 발생할 수도 있습니다. 너무 낮게 설정하면 대부분의 항목이 속도 향상 없이 순차적으로 압축됩니다. 따라서 숙련된 사용자는 트레이드오프를 고려하여 할당할 수 있습니다.
귀하의 경우에 가장 적합한 설정이 무엇인지 결정하기 위해 일반적인 데이터에 대해 다양한 병렬 압축 모드를 사용해 보시기 바랍니다.
C# 샘플에서 병렬 압축을 사용하여 ZIP 아카이브를 만드는 방법
단계: C#에서 병렬 압축을 사용하여 ZIP 아카이브 생성
FileMode.Create
에서 파일 스트림(FileStream
)을 열어 새 ZIP 파일(archive.zip
)을 만듭니다.- ZIP 항목 관리를 위해 새로운 ‘Archive’ 개체를 초기화합니다.
CreateEntry
메소드를 사용하여 “first.bin
” 및 “last.bin
“과 같은 여러 항목을 추가하고File.OpenRead
를 사용하여 소스 파일(data1.bin
및dataN.bin
).ParallelOptions
로ArchiveSaveOptions
를 설정합니다. 여기서ParallelCompressInMemory
는ParallelCompressionMode.Always
로 설정되어 더 빠른 보관을 위해 병렬 압축을 활성화합니다.Save
방법을 사용하여 지정된 옵션으로 아카이브를 저장합니다.
1 using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
2 {
3 using (Archive archive = new Archive())
4 {
5 archive.CreateEntry("first.bin", File.OpenRead("data1.bin"));
6 ...
7 archive.CreateEntry("last.bin", File.OpenRead("dataN.bin"));
8 archive.Save(zipFile, new ArchiveSaveOptions()
9 {
10 ParallelOptions = new ParallelOptions()
11 { ParallelCompressInMemory = ParallelCompressionMode.Always }
12 });
13 }
14 }