一行代码在 .NET 项目里启用 Satori GC

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

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

xml 复制代码
<Sdk Name="PublishWithSatoriGC" Version="10.0.13-satori.37965325580.1" />

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

xml 复制代码
<Sdk Name="PublishWithSatoriGC" Version="11.0.0-satori.37965325036.1" />

即可。

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

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

例如:

bash 复制代码
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 以内。

相关推荐
宇卿.1 小时前
C#语句:
开发语言·c#
咕白m6252 小时前
使用 C# 将 TIFF 转换为 PDF
前端·c#
JQLvopkk3 小时前
HslCommunication,一个工具测遍所有 PLC
开发语言·人工智能·c#·交互
下页、再停留3 小时前
【C#桌面客户端系列学习-7】数据查询展示
开发语言·c#·visual studio
QQ14220784494 小时前
从 C# WinForms 到 Flask + SQLite:期刊出版 XML 生成器(JATS)重构实践
sqlite·flask·c#
半亩码田4 小时前
C#转Python第4.7篇:logging:Python 的标准日志库
开发语言·python·c#
QUDONG_biubiubiu5 小时前
.NET Runtime 6.0/7.0/8.0/9.0下载修复教程,软件打不开这样解决
.net·net runtime下载·net运行库修复·net runtime安装
宝桥南山5 小时前
.NET 11 - 尝试创建一下AGUIServer和AGUIClient(基于新版.NET SDK for AG-UI)
microsoft·ai·微软·c#·aigc·.net
czhc11400756635 小时前
加在入口还是出口 —— 以及一个“看着像文件夹“的文件
c#