1. 简单介绍
微软在2026/10/13发布了.NET11 Release Candidate 2,11月微软将会发布.NET11正式版,这是一个STS版本(Standard Term Support),微软提供两年支持。当前需要安装Visual Studio Code with the C# Dev Kit或者Visual Studio 2026 Insiders,才能体验.NET11新特性。
这边将简单尝试一下.NET11中基于Zstandard (简称zstd)的压缩新特性。
2.Zstandard说明
常见的压缩格式有rar,zip,7z,tar等,而压缩算法有gzip,Brotli,Zstd,Pigz,ISA-L,Pzstd等。一个格式并不是绑定到一个特定压缩算法的,比如rar, zip, 7z都支持好几个压缩算法。Zstd是facebook于2016推出的,Zstd在压缩速度和压缩比方面都能提供比较好的效果。
下面是Zstandard官方做的一个benchmark数据,
note, zstd 支持配置--fast参数,数字越大压缩速度越快,不过压缩比会降低(compression ratio)。
3. Zstandard实践
3.1 制作项目
创建一个ASP.NET Core WebAPI项目,在项目中添加和配置request compression middleware和Response compression middleware。同时通过ZstandardCompressionOptions可以配置Quality(值可以为1-22),值越大,压缩的最终size越小,不过速度变慢。
var builder = WebApplication.CreateBuilder(args) ... builder.Services.AddResponseCompression(options => { options.EnableForHttps = true; }); builder.Services.AddRequestDecompression(); builder.Services.Configure<ZstandardCompressionProviderOptions>(options => { options.CompressionOptions = new ZstandardCompressionOptions { Quality = 6 }; }); var app = builder.Build(); ... app.UseRequestDecompression(); app.UseResponseCompression(); app.MapGet("/zstdcheck", () => { try { using StreamReader reader = new("response_202610.json"); string text = reader.ReadToEnd(); return Results.Ok(text); } catch (IOException e) { return Results.Empty; } }) .WithName("ZstandardCompressionCheck"); app.Run();假定已经存在一个文件response_202610.json,大小是2M多。
3.2 测试一下
1) 使用dotnet run命令运行项目,如果配置了swagger,则打开Swagger页面,
3) 当设定Quality值为6时候,
查看webapi的网络请求情况,发现最终response size是34.4KB,同时时间消耗了103ms。
同时在Response headers中多出了Vary:Accept-Encoding的header,
4) 当设定Quality值为16时候
查看webapi的网络请求情况,发现最终response size是30.7KB,时间消耗了755ms。说明Quality值越大,确实压缩的size越小,但是速度越慢。
4.总结
本文简单尝试了一下.NET11支持进行Zstandard压缩的新特性,当前.NET11已经进入Release Candidate 2阶段,需要继续学习一下新特性。
本文如果哪里有错误,麻烦告之,谢谢谢谢!