c# 32位程序突破2G内存限制

起因

在开发过程中,由于某些COM组件只能在32位程序下运行,程序不得不在X86平台下生成。而X86的32位程序默认内存大小被限制在2G。由于程序中可能存在大数量处理,期间对象若没有及时释放或则回收,内存占用达到了1.2G左右,就会引发异常“内存溢出”。
环境:Visual Studio 2022

问题复现

c# 32位程序突破2G内存限制_第1张图片

解决方案

1、在VS中右键【启动项目】的【属性】,在【生成事件】中申请大内存
c# 32位程序突破2G内存限制_第2张图片
2、使用editbin.exe申请大内存(注意editbin这个exe需要vs安装c++相关组件)。安装好后一般在如下目录中:C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.30.30705\bin\Hostx86\x86
在命令行中输入如下命令:

CALL "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat"
editbin /largeaddressaware "$(TargetPath)"

3、再次运行,可见已成功突破2G内存限制
c# 32位程序突破2G内存限制_第3张图片

查看exe是否支持大内存

在命令窗口使用dumpbin查看。
命令:dumpbin /headers xxx.exe
运行命令后可见,蓝色框内,程序已经突破2G内存限制。
c# 32位程序突破2G内存限制_第4张图片

未突破2G内存限制程序显示:
c# 32位程序突破2G内存限制_第5张图片

天地不过是飘摇的逆旅,昼夜不过是光阴的门户。 ——《花镜》

你可能感兴趣的:(C#,microsoft,windows)