.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。
如果大家有更好的方案和建议,可以评论区留言,互相交流!