Přehled

Většina kompresních algoritmů byla navržena pro jednojádrové procesory. V éře vícejádrových CPU je však výhodné využít všechna vaše CPU jádra k urychlení vytváření archivů. Aspose.ZIP poskytuje tuto možnost pro některé archivní formáty.

Paralelní metody na archivech BZIP2, LZIP a XZ

Paralelizace je možná díky blokové povaze těchto algoritmů. Na programové úrovni tyto archivy využívají společný přístup vícejádrové komprese. Uživatel může nastavit počet vláken pomocí vlastnosti CompressionThreads . Pokud je tedy tato vlastnost více než jedna, použije se několik jader 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 });
    }

Jak komprimovat složku pomocí .NET

Archivy ZIP slouží ke kompresi a konsolidaci jednoho nebo více souborů nebo složek do jednotného kontejneru. V .NET můžete použít třídu ZipFile pro práci se soubory ZIP a kompresi. Primárním cílem archivace je obvykle zmenšit velikost souboru pro ukládání nebo přenos a zároveň začlenit opatření pro šifrování pro zvýšení bezpečnosti. Kromě tradičních nástrojů pro kompresi souborů najdou funkce automatické komprese/extrakce uplatnění v různých desktopových a webových aplikacích a usnadňují úkoly, jako je nahrávání, stahování, sdílení nebo šifrování souborů.

Archivy 7Z LZMA2

Jednou z metod komprese formátu 7Z je LZMA2 , kterou lze komprimovat do několika vláken. Podobně jako u předchozích typů archivů můžete nastavit počet vláken pomocí vlastnosti 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");
    }

Paralelní metoda v archivech ZIP

U předchozích tříd archivů byla paralelizace aplikována buď na úrovni bloku nebo na úrovni algoritmu. Pro archiv ZIP je to možné na vstupní úrovni. Chcete-li to provést, vytvořte instanci ParallelOptions při ukládání do archivu.

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 }
        });
    }

Strategie nastavení Parallel-Compress-In-Memory se používá pro multitasking

Nastavení ParallelCompressInMemory označuje strategii, kterou volíme pro multitasking. Zde jsou tři možnosti :
ParallelCompressionMode.Never: komprese všech záznamů je sekvenční. Pouze jedno jádro CPU pracuje na kompresi a splachuje komprimovaná data tak, jak přicházejí.
ParallelCompressionMode.Always: Vynucuje kompresi záznamů v různých vláknech bez ohledu na velikost záznamu, dostupnou paměť a další faktory. Každé jádro CPU současně komprimuje soubor, přičemž komprimovaná data uchovává v paměti RAM. Po zkomprimování záznamu se vyprázdní do výsledného proudu. Pokud je velikost vaší paměti RAM malá a celková velikost některých N položek (kde N je počet jader CPU) velká, může se stát, že se veškerá RAM dostupná pro CLR vyčerpá a vznikne OutOfMemoryExcepton.
**ParallelCompressionMode.Auto: ** Odhaduje jádra CPU, velikosti záznamů, dostupnou paměť a volí, zda chcete záznamy komprimovat paralelně nebo postupně. V tomto režimu se některé menší položky komprimují paralelně, zatímco jiné postupně. Záznamy LZMA a PPMd nejsou komprimovány paralelně kvůli vysoké spotřebě paměti. Obecně je bezpečné jít s touto možností; Aspose.ZIP je opatrný s odhady a přepíná na sekvenční kompresi jako záložní. Pro tento režim existuje ještě jedna vlastnost ParallelOptions – AvailableMemorySize. Pro jakýkoli jiný režim je to zbytečné. Zhruba řečeno, je to nejvyšší limit alokované paměti při komprimaci záznamů se všemi jádry CPU, v megabajtech. Aspose.ZIP používá toto číslo k odhadu největší velikosti záznamu, který lze bezpečně komprimovat paralelně. Záznamy nad prahovou hodnotou, které mají být komprimovány postupně. AvailableMemorySize je dvousečná zbraň: je-li nastavena příliš vysoko s velkými položkami, může způsobit vyčerpání paměti RAM, intenzivní swap a dokonce může být výjimka s nedostatkem paměti. Je-li nastaveno příliš nízko, většina záznamů bude komprimována sekvenčním způsobem bez velkého zrychlení. Sofistikovaní uživatelé jej tedy mohou přiřadit s ohledem na kompromis.
Doporučujeme vám, abyste si na svých typických datech pohráli s různými režimy paralelní komprese, abyste zjistili, jaké jsou ve vašem případě nejlepší nastavení.
  

Support and Learning Resources

  
  

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