.NET 6.0下Dictionary触发OutOfMemoryException问题求助
.NET 6 Linux下Dictionary触发OutOfMemoryException的解决办法
核心问题:gcAllowVeryLargeObjects配置错误
你的runtimeconfig.json存在两处配置错误,导致该开关未生效:
- 配置项键名错误,正确键应为
System.GC.AllowVeryLargeObjects,而非gcAllowVeryLargeObjects; - 配置位置错误,该选项必须放在
configProperties节点内部,而非runtimeOptions的根节点下。
修正后的完整配置如下:
{ "runtimeOptions": { "tfm": "net6.0", "framework": { "name": "Microsoft.NETCore.App", "version": "6.0.0" }, "configProperties": { "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, "System.Reflection.NullabilityInfoContext.IsSupported": true, "System.GC.AllowVeryLargeObjects": true } } }
额外排查方向
- 检查元素内存占用:如果Dictionary的Key或Value是大对象(如超长字符串、大字节数组),300多万个元素的累计内存可能远超预期。可使用
dotnet-dump工具分析内存快照,定位大对象来源。 - 启用服务器GC:Linux x64环境下,服务器GC更适合高内存负载场景,能优化内存分配和碎片问题。在
configProperties中添加"System.GC.Server": true即可启用。 - 确认系统可用内存:排查服务器实际剩余内存,避免因系统层面内存耗尽导致的OutOfMemoryException。
内容的提问来源于stack exchange,提问作者Denys
相关产品推荐
相关产品推荐

