一行代码在 .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 以内。

相关推荐
Huanzhi_Lin1 天前
资源回收源码阅读参考-上
游戏开发·gc·laya·layaair·资源回收·laya3.4
Leinwin1 天前
Copilot Studio 实战:多模型选择、GitHub Copilot harness 计费与 Copilot Credits 额度管理
开发语言·c#
FuckPatience1 天前
C# Winform 使用Label循环显示闪烁
开发语言·c#
念何架构之路1 天前
OpenTelemetry核心概念
后端·目标跟踪·golang·c#·linq
开开心心就好1 天前
电脑语音实时转文字工具,会议记录很省事
运维·服务器·前端·c#·ocr·perl·1024程序员节
波力海苔夹心脆6751 天前
C# 固高 GTS 运动控制卡入门:伺服上下电、Jog 点动与二维插补(WinForms 实战)
服务器·开发语言·c#·运动控制·伺服电机·winforms·固高
CSharp精选营1 天前
制造业 ERP 物料建模:主料、辅料和 BOM 到底怎么拆才稳
.net·erp·bom·制造业·物料建模
IT规划师1 天前
MQTT实战 - MQTT高频面试题 + 我的8年实战答案(十一)
物联网·mqtt·面试·.net core·iot·mqttnet
何以解忧唯有撸码2 天前
c# + YOLODotNet+OpenCVSharp 实现物品轨迹追踪
计算机视觉·c#·winform·yolov8·opencvsharp