Overzicht
De meeste compressiealgoritmen zijn ontworpen voor single-coreprocessors. In het tijdperk van multi-core CPU's is het echter nuttig om al uw CPU-kernen te gebruiken om het maken van archieven te versnellen. Aspose.ZIP biedt deze mogelijkheid voor sommige archiefformaten.Parallelle methoden op BZIP2-, LZIP- en XZ-archieven
Parallellisatie is mogelijk vanwege de blokaard van deze algoritmen. Op programmaniveau gebruiken deze archieven een gemeenschappelijke benadering van multi-core compressie. De gebruiker kan het aantal threads instellen via de eigenschap CompressionThreads . Dus als deze eigenschap meer dan één is, worden er meerdere CPU-kernen gebruikt.
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 });
}
Een map zippen met .NET
ZIP-archieven dienen voor het comprimeren en consolideren van een of meerdere bestanden of mappen in een uniforme container. In .NET kunt u de klasse ZipFile gebruiken om met ZIP-bestanden en compressie te werken. Het primaire doel van archivering is doorgaans het verkleinen van de bestandsgrootte voor opslag of verzending, terwijl ook encryptiemaatregelen worden opgenomen voor verbeterde beveiliging. Naast de traditionele tools voor bestandscompressie, vinden geautomatiseerde compressie-/extractiefuncties toepassing in diverse desktop- en webapplicaties, waardoor taken zoals het uploaden, downloaden, delen of coderen van bestanden worden vergemakkelijkt.
7Z LZMA2-archieven
Een van de compressiemethoden voor het 7Z-formaat is LZMA2 , dat in verschillende threads kan worden gecomprimeerd. Net als bij eerdere soorten archieven kunt u het aantal threads instellen via de eigenschap 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");
}
Parallelle methode voor ZIP-archieven
Voor eerdere archiefklassen werd parallellisatie toegepast op blok- of algoritmeniveau. Voor het ZIP-archief is het mogelijk op instapniveau. Om dit te doen, instantiëert u ParallelOptions bij het opslaan van archief.
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 }
});
}
De installatiestrategie Parallel-Compress-In-Memory wordt gebruikt om te multitasken
De instelling ParallelCompressInMemory geeft de strategie aan die we kiezen om te multitasken. Hier zijn drie opties :ParallelCompressionMode.Never: compressie van alle vermeldingen is opeenvolgend. Slechts één CPU-kern werkt aan compressie en wist gecomprimeerde gegevens zodra deze binnenkomen.
ParallelCompressionMode.Always: Het forceert compressie van items in verschillende threads, ongeacht de itemgrootte, het beschikbare geheugen en andere factoren. Elke CPU-kern comprimeert tegelijkertijd een bestand en houdt de gecomprimeerde gegevens in het RAM. Nadat de invoer is gecomprimeerd, wordt deze doorgespoeld naar de resultaatstroom. Als uw RAM-hoeveelheid klein is en de totale grootte van sommige N-items (waarbij N het aantal CPU-kernen is) enorm is, kan het gebeuren dat alle beschikbare RAM voor CLR uitgeput raakt en OutOfMemoryExcepton ontstaat.
ParallelCompressionMode.Auto: Het schat de CPU-kernen, de grootte van de items, het beschikbare geheugen en kiest of de items parallel of opeenvolgend worden gecomprimeerd. In deze modus worden enkele kleinere items parallel gecomprimeerd, terwijl andere opeenvolgend worden gecomprimeerd. LZMA- en PPMd-vermeldingen worden niet parallel gecomprimeerd vanwege het hoge geheugengebruik. Over het algemeen is het veilig om voor deze optie te kiezen; Aspose.ZIP is op zijn hoede met schattingen en schakelt als terugval over op sequentiële compressie. Er is nog een eigenschap van ParallelOptions voor deze modus: AvailableMemorySize. Voor elke andere modus is het zinloos. Grof gezegd is dit de bovengrens van het toegewezen geheugen bij het comprimeren van gegevens met alle CPU-kernen, in megabytes. Aspose.ZIP gebruikt dat getal om de grootste invoergrootte te schatten die veilig parallel kan worden gecomprimeerd. Invoer boven de drempel moet opeenvolgend worden gecomprimeerd. AvailableMemorySize is een tweesnijdend zwaard: als het te hoog wordt ingesteld met enorme invoer, kan het RAM-uitputting veroorzaken, intense swap, en er is mogelijk zelfs sprake van een onvoldoende geheugenuitzondering. Omdat ze te laag zijn ingesteld, worden de meeste gegevens op een sequentiële manier gecomprimeerd zonder veel snelheid. Geavanceerde gebruikers kunnen dit dus toewijzen, rekening houdend met een afweging.
We raden u aan om met verschillende modi van parallelle compressie op uw typische gegevens te spelen om te bepalen wat in uw geval de beste instellingen zijn.
Andere ondersteunde Aspose.ZIP voor .NET API-functies
Gebruik de Aspose.ZIP C#-bibliotheek om zip-bestandsdocumenten te converteren, samen te voegen, te bewerken, gegevens uit de archieven te extraheren en meer!
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