Start Debugging

.NET 11 adiciona compressão Zstandard nativa ao System.IO.Compression

.NET 11 Preview 1 entrega ZstandardStream, ZstandardEncoder e ZstandardDecoder no System.IO.Compression, oferecendo suporte zstd rápido e integrado sem pacotes de terceiros.

Desenvolvedores .NET que precisaram de compressão Zstandard contaram com wrappers de terceiros como ZstdSharp ou ZstdNet por anos. A partir do .NET 11 Preview 1, isso muda: System.IO.Compression agora entrega ZstandardStream, ZstandardEncoder e ZstandardDecoder como APIs de primeira classe, sem desvios por NuGet.

Por que Zstandard importa

Zstandard (zstd), desenvolvido pela Meta, fica em um ponto doce entre velocidade e taxa. Benchmarks internos da equipe .NET mostram que ele comprime 2-7x mais rápido que Brotli e Deflate em qualidade equivalente, e descomprime 2-14x mais rápido no nível mais rápido. Para payloads HTTP, envio de log, ou serialização binária, essa lacuna é significativa.

Compressão em streaming em cinco linhas

A API espelha BrotliStream e GZipStream, então o caminho de migração é familiar:

using System.IO.Compression;

await using var input = File.OpenRead("dump.json");
await using var output = File.Create("dump.json.zst");
await using var zstd = new ZstandardStream(output, CompressionMode.Compress);

await input.CopyToAsync(zstd);

A descompressão é a imagem espelhada: envolva o stream de entrada e leia.

await using var compressed = File.OpenRead("dump.json.zst");
await using var zstd = new ZstandardStream(compressed, CompressionMode.Decompress);
await using var output = File.Create("dump.json");

await zstd.CopyToAsync(output);

Controle fino com ZstandardEncoder

Quando você precisar definir níveis de compressão ou usar dicionários treinados, desça para ZstandardEncoder:

using var encoder = new ZstandardEncoder(compressionLevel: 6);

Span<byte> source = GetPayload();
Span<byte> destination = new byte[ZstandardEncoder.GetMaxCompressedLength(source.Length)];

encoder.TryCompress(source, destination, out int bytesWritten);

Os níveis de compressão vão de 1 (mais rápido) a 22 (saída menor). O nível 3, o padrão, já supera as taxas do Deflate para a maioria das cargas de trabalho. ZstandardDictionary permite treinar com amostras representativas para taxas ainda melhores em payloads pequenos e repetitivos como respostas de API ou linhas de log.

HttpClient ganha descompressão Zstd automática

DecompressionMethods agora inclui um membro Zstandard, então optar pela descompressão HTTP transparente é uma única flag:

var handler = new HttpClientHandler
{
    AutomaticDecompression = DecompressionMethods.Zstandard
};
var client = new HttpClient(handler);

Se o servidor enviar uma resposta Content-Encoding: zstd, o handler a descomprime antes que seu código veja o stream.

O que experimentar agora

Instale o .NET 11 Preview SDK, mire net11.0, e troque um dos seus sites de chamada existentes de BrotliStream ou GZipStream para ZstandardStream. Meça o throughput e o tamanho comprimido: os números tendem a falar por si.

A superfície completa da API, incluindo ZstandardCompressionOptions para ajuste de tamanho de janela, está documentada na Microsoft Learn.

< Voltar