VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1084|回复: 9

tadoquery 内存释放

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-12 14:00:01 | 显示全部楼层 |阅读模式
a表有50万数据,一次性全部取出。处理后放入b表

刚开始执行的时候内存(512M)占用率30%,随着处理数据量的增加,内存占用率不断增加(大约处理8万条数据后512M几乎全部用完)。不知道什么原因造成的。有什么解决办法,请高手指教。。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-26 15:00:01 | 显示全部楼层
好象没这么做过,你要是update语句会好一点,否则最好别一次性取这么大出来
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-26 16:00:01 | 显示全部楼层
考勤记录?
回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-4-27 09:15:02 | 显示全部楼层
1,程序本身就有问题,跟数据量无关;
2,如果和数据量有关,那么可以找一个ID,分批来处理
回复

使用道具 举报

0

主题

14

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-28 11:30:01 | 显示全部楼层
程序质量高,50万记录不多了, 不过你可以考虑分批处理了
回复

使用道具 举报

0

主题

53

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-5-1 19:45:01 | 显示全部楼层
仿照分页浏览来做,你可以将这些数据分成若干批,根据你的内存大小来选择分批单位。一步一步执行,每执行一次释放前面一批数据!
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-2 10:30:02 | 显示全部楼层
把大数据量的ADO设置成CursorType = ctOpenForwardOnly

可能会减少内存的占用量,只是数据集只能单向移动了
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-5-7 12:00:02 | 显示全部楼层
50万已经是分批量处理了。共同的数据量有几百万。

在a表中有个字段是标识记录这条记录是否被操作过,初始为0,我用select取出50万数据,每次处理一条那么给这条赋值为一个1。然后就出现标题的问题了。
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-9 19:30:01 | 显示全部楼层
学习中~!
回复

使用道具 举报

0

主题

53

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-7-13 16:45:01 | 显示全部楼层
看来这跟你的代码有关系,你的处理估计是逐条进行的,所以北被处理过的记录没得到释放,直到你这一批的记录处理完才会释放, 当然内存会不断增大,而且你加载的字段也非常多,建议你把不必要的字段不要加载进来。同时再进一步分批,根据你的测试,觉得应该在4万条一批比较好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表