迁移到.NET 5后执行dotnet build出现内存溢出问题如何解决
dotnet build 内存溢出问题解决方案
你之前使用的-maxCpuCount:1仅限制构建使用的CPU核心数,不会限制内存分配上限,因此对内存溢出问题没有缓解作用,可通过以下方案解决:
- 配置.NET运行时GC堆内存硬限制
该方案直接限制整个dotnet进程的最大内存使用量,生效范围最直接,可根据CI服务器可用内存调整限制值:
Linux 环境下执行构建前运行命令:
Windows 环境下执行构建前运行命令:export DOTNET_GC_HEAPLIMIT=7Gset DOTNET_GC_HEAPLIMIT=7G - 禁用Roslyn共享编译
.NET 5开始默认开启的共享编译机制会驻留后台进程缓存编译数据,大项目场景下极易占用超过10GB内存,构建时添加参数关闭该功能即可大幅降低内存占用:dotnet build /p:UseSharedCompilation=false -maxCpuCount:1 - 关闭非必要构建组件
- CI环境不需要执行代码分析时,添加
/p:RunAnalyzers=false参数关闭所有代码分析器,可减少30%~50%的内存开销 - 提前单独执行
dotnet restore,构建时添加--no-restore参数跳过还原步骤,避免额外内存占用
- CI环境不需要执行代码分析时,添加
- 拆分构建流程
若解决方案包含大量项目,可调整CI脚本逐个构建单个项目,替代一次性构建整个解决方案,避免同时加载全部项目元数据导致内存暴涨
内容的提问来源于stack exchange,提问作者Wojciech Rak
相关产品推荐
相关产品推荐

