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