线程中无限循环内存占用每隔数十秒就增加4k,不知道是怎么回事?(50分)

  • 主题发起人 lichengjun
  • 开始时间
L

lichengjun

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个线程中设置了一个无限循环,该循环每隔5秒读一下数据库,查看是否有新的记录,如果
有新的记录则将该记录取出进行处理,数据库是oracle9i,通过ADO处理,在使用中发现该程序在内存占用上
每隔数十秒就增加4k,不到一天内存就会增加数倍,想请教各位大侠有没有什么好的解决方法,
运行环境是win2000,编译delphi6.(我换用了BDE也一样)
 
可能是以下原因。
操作系统分配给进程的方案是:
如果一个进程长时间占用CPU,那么分配给它的连续的时间片会越来越多。
比如第一次分配1个,第二次分配2个,第三次分配4个。。。
这样运行时间越长,也就越占用资源了。
因为是无限循环,内存占用可能跟这个有关。
 
用Memory sleuth或者memory proof查看程序运行时候的内存泄漏状态,一般能找到,
如果是ado或者bde的问题,那就没有办法了,如果是自己代码的问题,则不难处理了。
 
操作系统分配给进程的方案是:
如果一个进程长时间占用CPU,那么分配给它的连续的时间片会越来越多。
==============================
我认为不对。
根据操作系统对线程管理的理论来说,应该是越来越少(线程级别降低了)

这个问题我觉得应该是他程序设计的错误或者失误导致的。
很可能正是Adnil兄说的内存泄漏的问题(症状极其相似)。
 
增量每次一个页大小还能是什么?
时间片的分配是由进程长时间占用 CPU 决定?
 
[?],请教如果是进程占用的问题,那么按我的程序思路作无限循环应该如何实现,如果是内存泄漏
用Memory sleuth或者memory proof要怎么作来看自己的程序漏洞,可以提供源码看一看.如果
可以解决问题再给100分.
 
你这里的无限循环通过线程中写循环Sleep(5000)也行,设置一个定时器,间隔时间是5秒钟也行,
理论上都不会出现内存越来越多的情况的。

Memory sleuth或者memory proof都不需要写代码,你用了就知道了,非常简单。
 
Memory sleuth或者memory proof是什么咚咚,在delphi6的菜单里我找不到。
 
不如先贴你的代码。
 
顶部