Przegląd
Większość algorytmów kompresji została zaprojektowana dla procesorów jednordzeniowych. Jednak w dobie procesorów wielordzeniowych korzystne jest wykorzystanie wszystkich rdzeni procesora, aby przyspieszyć tworzenie archiwów. Aspose.ZIP zapewnia tę możliwość dla niektórych formatów archiwów.Metody równoległe w archiwach BZIP2, LZIP i XZ
Równoległość jest możliwa ze względu na blokowy charakter tych algorytmów. Na poziomie programu archiwa te wykorzystują wspólne podejście do kompresji wielordzeniowej. Użytkownik może ustawić liczbę wątków za pomocą właściwości CompressionThreads . Jeśli więc ta właściwość ma więcej niż jedną, użytych zostanie kilka rdzeni procesora.
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 spakować folder za pomocą .NET
Archiwa ZIP służą do kompresji i konsolidacji jednego lub wielu plików lub folderów w ujednolicony kontener. W .NET możesz użyć klasy ZipFile do pracy z plikami ZIP i kompresją. Podstawowym celem archiwizacji jest zazwyczaj zmniejszenie rozmiaru pliku do przechowywania lub transmisji, przy jednoczesnym zastosowaniu środków szyfrowania w celu zwiększenia bezpieczeństwa. Oprócz tradycyjnych narzędzi do kompresji plików, funkcje automatycznej kompresji/ekstrakcji znajdują zastosowanie w różnych aplikacjach komputerowych i internetowych, ułatwiając zadania takie jak przesyłanie, pobieranie, udostępnianie lub szyfrowanie plików.
Archiwum 7Z LZMA2
Jedną z metod kompresji formatu 7Z jest LZMA2 , którą można skompresować w kilku wątkach. Podobnie jak w przypadku poprzedniego rodzaju archiwów, liczbę wątków można ustawić za pomocą właściwości 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");
}
Metoda równoległa w archiwach ZIP
W przypadku poprzednich klas archiwum zastosowano równoległość na poziomie bloku lub algorytmu. W przypadku archiwum ZIP jest to możliwe na poziomie podstawowym. Aby to zrobić, utwórz instancję ParallelOptions podczas zapisywania archiwum.
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 }
});
}
Strategia konfiguracji Parallel-Compress-In-Memory służy do wykonywania wielu zadań jednocześnie
Ustawienie ParallelCompressInMemory wskazuje wybraną strategię wielozadaniowości. Oto trzy opcje :ParallelCompressionMode.Never: kompresja wszystkich wpisów jest sekwencyjny. Tylko jeden rdzeń procesora działa w trybie kompresji i opróżnia skompresowane dane w miarę ich otrzymywania.
ParallelCompressionMode.Always: Wymusza kompresję wpisów w różnych wątkach niezależnie od rozmiaru wpisu, dostępnej pamięci i innych czynników. Każdy rdzeń procesora jednocześnie kompresuje plik, przechowując skompresowane dane w pamięci RAM. Po skompresowaniu wpis jest opróżniany do strumienia wynikowego. Jeśli ilość pamięci RAM jest mała, a całkowity rozmiar niektórych N wpisów (gdzie N to liczba rdzeni procesora) jest ogromny, może się zdarzyć, że cała pamięć RAM dostępna dla CLR zostanie wyczerpana i pojawi się wyjątek OutOfMemoryExcepton.
ParallelCompressionMode.Auto: Ocenia rdzenie procesora, rozmiary wpisów, dostępną pamięć i decyduje, czy kompresować wpisy równolegle czy sekwencyjnie. W tym trybie niektóre mniejsze wpisy należy kompresować równolegle, a inne sekwencyjnie. Wpisy LZMA i PPMd nie są kompresowane równolegle ze względu na duże zużycie pamięci. Ogólnie rzecz biorąc, można bezpiecznie skorzystać z tej opcji; Aspose.ZIP jest ostrożny w szacunkach i przełącza się na kompresję sekwencyjną jako rozwiązanie awaryjne. Jest jeszcze jedna właściwość ParallelOptions dla tego trybu - AvailableMemorySize. W innym trybie nie ma to sensu. Z grubsza mówiąc, jest to górny limit alokowanej pamięci podczas kompresji wpisów wszystkimi rdzeniami procesora, w megabajtach. Aspose.ZIP wykorzystuje tę liczbę do oszacowania największego rozmiaru wpisu, który można bezpiecznie skompresować równolegle. Wpisy powyżej progu mają być kompresowane sekwencyjnie. AvailableMemorySize to miecz obosieczny: ustawiony zbyt wysoko przy dużych wpisach może spowodować wyczerpanie pamięci RAM, intensywna wymiana, a nawet może wystąpić wyjątek dotyczący braku pamięci. Ustawienie zbyt niskie spowoduje, że większość wpisów zostanie skompresowana sekwencyjnie, bez większego przyspieszenia. Dlatego zaawansowani użytkownicy mogą go przypisać, biorąc pod uwagę kompromis.
Zachęcamy do zabawy z różnymi trybami kompresji równoległej na typowych danych, aby określić, jakie ustawienia są najlepsze w Twoim przypadku.
Inne obsługiwane funkcje Aspose.ZIP dla .NET API
Skorzystaj z biblioteki Aspose.ZIP C#, aby konwertować, scalać, edytować dokumenty w formacie zip, wyodrębniać dane z archiwów i nie tylko!
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