.NET 9.0'da yeni [25]: Zlibs ve Brots ile Sıkıştırma Ayarları

Saberie

Active member
.NET yıllardır Zlibs ve Brots ile sıkıştırma öğrendi. .NET 9.0 ile Microsoft artık iki sınıfa liderlik ediyor ZLibCompressionOptions VE BrotliCompressionOptions Belirli sıkıştırma ayarları oluşturabileceğiniz biri.






Dotnet Doctor-Holger Schwichtenberg




Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.







Sınıfta ZLibCompressionOptions Mülkler var CompressionStrategy Bir numaralandırma şeklinde e CompressionLevel 0 ile 9 arasında bir bütün olarak, burada 0 sıkıştırma anlamına gelmez. Sınıfta BrotliCompressionOptions Sadece bir mülk var Quality 0'dan 11'e kadar.



Aşağıdaki kod, on ZLIB sıkıştırma seviyesinin tamamı ve Brotli'nin sıkıştırılması için 12 kalite seviyesinin tamamı için 100.000 karakter içeren sıkıştırılmış bir metnin boyutunu harcayan bir uygulama örneğini göstermektedir:



public class FCL9_Compression
{

string GetText(int length = 1)
{
string text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
// length * text
for (int i = 0; i < length; i++) text += text;
Console.WriteLine("Länge Originaltext: " + text.Length);
return text;
}

public void ZLib()
{
string text = GetText(3);
int level = 5; // 0-9
var uncompressedStream = new MemoryStream(Encoding.UTF8.GetBytes(text));
var compressedStream = new MemoryStream();
using var zipStream = new ZLibStream(compressedStream, new ZLibCompressionOptions() { CompressionLevel = level, CompressionStrategy = ZLibCompressionStrategy.Default });
uncompressedStream.CopyTo(zipStream);
zipStream.Flush();
Console.WriteLine($"Länge bei ZLib-Komprimierungslevel #{level}: " + compressedStream.Length);
zipStream.Dispose();
}

public void Brotli()
{
string text = GetText(3);
int quality = 5; // 0-11
var uncompressedStream = new MemoryStream(Encoding.UTF8.GetBytes(text));
var compressedStream = new MemoryStream();
using var brotliStream = new BrotliStream(compressedStream, new BrotliCompressionOptions() { Quality = quality });
uncompressedStream.CopyTo(brotliStream);
brotliStream.Flush();
Console.WriteLine($"Länge bei Brotli-Komprimierungslevel #{quality}: " + compressedStream.Length);
brotliStream.Dispose();
}

public void ZLibAndBrotliComparison()
{
CUI.Demo();

string text = GetText(3);

for (int i = 0; i <= 9; i++)
{
var uncompressedStream = new MemoryStream(Encoding.UTF8.GetBytes(text));
var compressedStream = new MemoryStream();
using var zipStream = new ZLibStream(compressedStream, new ZLibCompressionOptions() { CompressionLevel = i, CompressionStrategy = ZLibCompressionStrategy.Default });
uncompressedStream.CopyTo(zipStream);
zipStream.Flush();
Console.WriteLine($"Länge bei ZLib-Komprimierungslevel #{i}: " + compressedStream.Length);
zipStream.Dispose();
}

for (int i = 0; i <= 11; i++)
{
// Kopiere den Text in einen MemoryStream
var uncompressedStream = new MemoryStream(Encoding.UTF8.GetBytes(text));
var compressedStream = new MemoryStream();
using var brotliStream = new BrotliStream(compressedStream, new BrotliCompressionOptions() { Quality = i });
uncompressedStream.CopyTo(brotliStream);
brotliStream.Flush();
Console.WriteLine($"Länge bei Brotli-Komprimierungslevel #{i}: " + compressedStream.Length);
brotliStream.Dispose();

//// Dekomprimiere den Text wieder
//compressedStream.Position = 0;
//var decompressedStream = new MemoryStream();
//using var brotliDecompressionStream = new BrotliStream(compressedStream, CompressionMode.Decompress);
//brotliDecompressionStream.CopyTo(decompressedStream);
//brotliDecompressionStream.Flush();
//Console.WriteLine("Dekomprimierter Text);
//string text2 = Encoding.UTF8.GetString(decompressedStream.ToArray());
//Console.WriteLine("Dekomprimierter Text: " + text2.Length);
}

}
}





Ekran görüntüsü sıkıştırma



Kod örneğinin çıkışı, farklı sıkıştırma ayarları boyunca uzunlukları gösterir.


(Resim: Ekran görüntüsü (Holger Schwichtenberg))




18 Kasım 2025'te BetterCode Online Konferansı () 10.0



(Resim: Coffeemill/123rf.com)


Sonraki LTS çıktısı devam ediyor: BetterCode Online Konferansı () .NET 10.0'da IX ve DPunkt.verlag tarafından düzenlenen 18 Kasım 2025'te IT-visions.de-Sesler Bu makalenin yazarı Dr. Holger Schwichtenberg ve diğer uzmanlar en önemli yenilikler. Bunlar.

Çevrimiçi mağazada indirimli kör kuş biletleri zaten mevcut olana kadar program henüz yayınlanmadı. Bir önceki yılın programı arşivde görüntülenebilir.








(RME)




Ne yazık ki, bu bağlantı artık geçerli değil.

Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.


Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!
 
Üst