众所周知 Satori GC 是 .NET 上兼具高吞吐、低延时和低占用的 GC。为了更方便地在项目里使用 Satori GC,我把 Satori GC 封装成了 MSBuild SDK 并传到了 nuget 上,这样就能通过仅仅一行代码在发布时启用 Satori GC 了。

对于 .NET 10,给你的项目文件里添加:


而如果是 .NET 11,则添加:


即可。

版本会跟随上游开发不断更新,因此请务必定期检查是否有新的版本。

加入之后就可以通过 dotnet publish 使用了。注意,只有自包含的发布才会生效,因此发布的时候需要带上 --self-contained,另外还支持 NativeAOT,ReadyToRun,裁剪和单文件。

例如:

dotnet publish -c Release -r win-x64 --self-contained /p:PublishSingleFile=true /p:PublishTrimmed=true
dotnet publish -c Release -r win-x64 /p:PublishAot=true

都是可以的。

支持 Windows、Linux 和 macOS,如果是 .NET 11 的话还支持 Android。

发布之后可以通过打印 GC.GetConfigurationVariables().ContainsKey("SatoriGC") 来判断 Satori GC 是否已经启用。
Satori GC 支持两个模式:Interactive 和 LowLatency,虽然两个模式下的延时都非常低,但相对而言前者更重视资源占用和吞吐量一些,而后者则更重视低延时的保证。默认模式是 Interactive,可以通过设置 GCSettings.LatencyMode 来在运行时动态切换。

最后上一个二叉树压力测试结果。

指标 Satori (Interactive) Satori (LowLatency) Workstation Server (DATAS)
总耗时 (ms) 12,611.39 15,383.19 35,289.56 16,112.36
最大暂停 (ms) 8.360 1.998 30.062 159.651
平均暂停 (ms) 0.381 0.233 3.366 2.850
P99.9 暂停 (ms) 8.224 1.867 26.852 150.798
P99 暂停 (ms) 1.759 1.126 24.465 41.442
P95 暂停 (ms) 0.789 0.570 14.992 4.046
P90 暂停 (ms) 0.664 0.440 13.575 2.139
P80 暂停 (ms) 0.477 0.331 4.711 1.782
峰值内存 (MB) 1,258.16 1,460.84 1,420.30 2,582.51
GC 后内存 (MB) 27.31 51.21 230.81 373.70

可以看到 Satori GC 无论是 Interactive 模式还是 LowLatency 模式,在这个测试中都全方位薄纱已有的 Workstation GC 和 Server GC:吞吐量最高的同时,延时和资源占用还是最低的。LowLatency 模式下更是把最大暂停时间压到了 2ms 以内。


原文地址: https://www.cveoy.top/t/topic/qHG6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录