2020/11/27

二次开发程序运行时爆内存的解决方案

作者 Leon

S3D目前仍然是32位软件,最大可调用内存为4个G,我们二次开发的工具或报表,也是同理,数据量一旦过大,经常会发生爆内存的情况导致无法进行下去。在S3D还没有发布64位版本之前,针对这个问题我们可以从以下几个方面来去做优化(.net开发范畴)。

1、控制入口的数据源的数量,通过特定对象类型或属性的方式进行初始化的过滤。

2、程序内的嵌套循环是否过多,能否考虑优化逻辑。

3、在适当的循环内部添加Abort()方法,进行内存的释放。此方法目前来说是最立竿见影的。但是最好也不要太频繁的使用,如果单次循环的速度很快,可以添加一个计数,当循环到多少次的时候执行一次Abort。

示例代码:

需要引入Common.Middle.Services,在类头实例化TransactionManager:

Imports Ingr.SP3D.Common.Middle.Services
Public Class CStart
Private TransMgr As New TransactionManager

尽量在大循环内的开始或结尾处添加下面这行代码:

TransMgr.Abort()
5 1 投票
文章评分