Genel bakış
Çoğu sıkıştırma algoritması tek çekirdekli işlemciler için tasarlanmıştır. Ancak çok çekirdekli CPU’lar çağında arşiv oluşturmayı hızlandırmak için tüm CPU çekirdeklerinizi kullanmak faydalıdır. Aspose.ZIP bu özelliği bazı arşiv formatları için sağlar.BZIP2, LZIP ve XZ arşivlerinde paralel yöntemler
Bu algoritmaların blok yapısından dolayı paralelleştirme mümkündür. Program düzeyinde bu arşivler çok çekirdekli sıkıştırmanın ortak yaklaşımını kullanır. Kullanıcı, iş parçacığı sayısını CompressionThreads özelliği aracılığıyla ayarlayabilir. Yani bu özellik birden fazlaysa birkaç CPU çekirdeği kullanılacaktır.
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 ile Bir Klasör Nasıl Sıkıştırılır
ZIP arşivleri, bir veya daha fazla dosya veya klasörün birleşik bir kapta sıkıştırılması ve birleştirilmesi amacına hizmet eder. .NET ’de, ZIP dosyaları ve sıkıştırmayla çalışmak için ZipFile sınıfını kullanabilirsiniz. Arşivlemenin temel amacı tipik olarak depolama veya aktarım için dosya boyutunu küçültürken aynı zamanda gelişmiş güvenlik için şifreleme önlemlerini de dahil etmektir. Geleneksel dosya sıkıştırma araçlarının ötesinde, otomatik sıkıştırma/çıkarma özellikleri çeşitli masaüstü ve web uygulamalarında uygulama bulur ve dosyaları yükleme, indirme, paylaşma veya şifreleme gibi görevleri kolaylaştırır.
7Z LZMA2 arşivleri
7Z formatı sıkıştırma yöntemlerinden biri, birkaç iş parçacığında sıkıştırılabilen LZMA2 yöntemidir. Önceki arşiv türlerine benzer şekilde, iş parçacığı sayısını CompressionThreads özelliği aracılığıyla ayarlayabilirsiniz.
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 arşivlerinde Paralel Yöntem
Önceki arşiv sınıfları için paralelleştirme blok veya algoritma düzeyinde uygulanıyordu. ZIP arşivi için giriş seviyesinde mümkündür. Bunu yapmak için arşiv kaydetmede ParallelOptions örneğini oluşturun.
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 }
});
}
Bellek İçinde Paralel Sıkıştırma kurulum stratejisi çoklu görev için kullanılır
ParallelCompressInMemory ayarı, çoklu görev için seçtiğimiz stratejiyi belirtir. İşte üç seçenek :ParallelCompressionMode.Never: tüm girişlerin sıkıştırılması sıralıdır. Yalnızca bir CPU çekirdeği sıkıştırma üzerinde çalışır ve sıkıştırılmış verileri geldiği anda temizler.
ParallelCompressionMode.Always: Giriş boyutuna, kullanılabilir belleğe ve diğer faktörlere bakılmaksızın farklı iş parçacıklarındaki girişlerin sıkıştırılmasını zorlar. Her CPU çekirdeği, sıkıştırılmış verilerini RAM’de tutarak bir dosyayı aynı anda sıkıştırır. Giriş sıkıştırıldığında sonuç akışına aktarılır. RAM miktarınız küçükse ve bazı N girişlerinin toplam boyutu (burada N, CPU çekirdeği sayısıdır) çok büyükse, CLR için mevcut tüm RAM tükenebilir ve OutOfMemoryExcepton ortaya çıkabilir.
ParallelCompressionMode.Auto: CPU çekirdeklerini, giriş boyutlarını, kullanılabilir belleği tahmin eder ve girişlerin paralel mi yoksa sırayla mı sıkıştırılacağını seçer. Bu modda bazı küçük girişler paralel olarak sıkıştırılırken diğerleri sırayla sıkıştırılır. Yüksek bellek tüketimi nedeniyle LZMA ve PPMd girişleri paralel olarak sıkıştırılmaz. Genel olarak bu seçeneği tercih etmek güvenlidir; Aspose.ZIP tahminler konusunda ihtiyatlı davranıyor ve bir geri dönüş olarak sıralı sıkıştırmaya geçiyor. Bu mod için ParallelOptions’ın bir özelliği daha var - AvailableMemorySize. Başka herhangi bir mod için anlamsızdır. Kabaca söylemek gerekirse, girişleri tüm CPU çekirdekleriyle megabayt cinsinden sıkıştırırken ayrılan belleğin yüksek sınırıdır. Aspose.ZIP, paralel olarak sıkıştırılması güvenli olan en büyük giriş boyutunu tahmin etmek için bu sayıyı kullanır. Eşiğin üzerindeki girişler sırayla sıkıştırılacaktır. AvailableMemorySize iki ucu keskin bir kılıçtır: büyük girişlerle çok yükseğe ayarlandığında RAM’in tükenmesine neden olabilir, yoğun takas ve hatta yetersiz bellek istisnası olabilir. Çok düşük bir değere ayarlandığında, girişlerin çoğu fazla hızlanma olmadan sıralı bir şekilde sıkıştırılacaktır. Bu nedenle, deneyimli kullanıcılar bunu dengelemeyi düşünerek atayabilir.
Sizin durumunuzda en iyi ayarların neler olduğunu belirlemek için tipik verileriniz üzerinde farklı paralel sıkıştırma modlarıyla oynamanızı öneririz.
Desteklenen Diğer Aspose.ZIP for .NET API Özellikleri
Zip dosyası belgelerini dönüştürmek, birleştirmek, düzenlemek, arşivlerden veri çıkarmak ve daha fazlası için Aspose.ZIP C# kütüphanesini kullanın!
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