WPF开发-32位应用增加可用内存

增大可用内存

注意

这种方式提高了内存的使用上限,作用比较明显,但是不是合理的做法,这样只是延迟了内存不足而导致的奔溃。

为什么 32 位程序只能使用最大 2GB 内存?

32 位寻址空间只有 4GB 大小,于是 32 位应用程序进程最大只能用到 4GB 的内存。然而,除了应用程序本身要用内存,操作系统内核也需要使用。应用程序使用的内存空间分为用户空间和内核空间,每个 32 位程序的用户空间可独享前 2GB 空间(指针值为正数),而内核空间为所有进程共享 2GB 空间(指针值为负数)。所以,32 位应用程序实际能够访问的内存地址空间最多只有 2GB。

设置

那么怎样让程序使用更多的内存呢?

image-20200818084950845

安装时注意勾选红框对应的模块

编辑一个程序使之声明支持大于 2GB 内存的命令是:

1
editbin /largeaddressaware xhschool.exe

其中,xhschool.exe 是我们准备修改的程序,可以使用相对路径或绝对路径(如果路径中出现空格记得带引号)。

验证这个程序是否改好了的命令是:

1
dumpbin /headers xhschool.exe | more

注意到 FILE HEADER VALUES 块的倒数第二行多出了 Application can handle large (>2GB) addresses,就说明成功了。

找到安装路径

在VS的安装路径下搜索editbin.exe

比如我的

D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\Hostx86\x86

添加到环境变量中

重启VS

那么怎么让程序生成时自动进行上面的操作呢?

项目右键属性=>生成事件=>生成后事件命令行

添加如下命令

1
editbin.exe /largeaddressaware xhschool.exe