.net Winform 32位桌面应用程序突破系统2G内存限制,解决内存溢出问题

.net Winform 32位桌面应用程序突破系统2G内存限制,解决内存溢出问题

32程序的内存地址空间只有2G,这2G内存除了存储程序数据外还需要存储程序本身,程序一旦使用超过1G的内存就不太稳定。

出现内存溢出的报错:System.OutOfMemoryException:引发类型为“System.OutOfMemoryException”的异常,而且winform控件用的是devexpress,表现出的是大红叉

解决方案:

如果在不动代码的情况下,我们可以通过配置开启/largeaddressaware去突破2G的限制,但是32位程序最大也就是到4G(虚拟地址)

有两种方法:

第一种是在vs32位程序控制台执行以下命令(这种比较麻烦,每次编译完成后,都需要去手动执行):

 

执行命令:editbin/largeaddressaware 主程序路径

 

 

 

 

 执行成功

第二种是在vs开发工具的项目属性->生成事件->后期生成事件命令行中设置如下命令行(相对于第一种比较容易,配置好,编译完成后自动执行,方便):

call "%VS110COMNTOOLS%..\..\VC\bin\vcvars32.bat"
editbin /largeaddressaware $(TargetPath)

 

如果可以改成anycpu或者x64位程序,当时是最好的,但是由于受部分32位组件的影响,目前只是把32位程序的内存进行了扩大解决,如果超过4G依然会内存溢出,所以接下来还是需要从代码上也进行优化,有条件最好也改成anycpu或x64。

如果大家有更好的方案和建议,可以评论区留言,互相交流!

posted @ 2022-02-18 10:30  haishu  阅读(2493)  评论(1编辑  收藏  举报