BDE运行一段时间后内存不足(200分)

  • 主题发起人 主题发起人 nhmichael
  • 开始时间 开始时间
N

nhmichael

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个应用,须运行十多次同一个程序,生成十多个进程。而程序中包含一个TDATABASE
的对象,约七、八个TQUERY对象,并有若干个定时器对象,数据库为MS SQL SERVER 7。当应
有运行一段时间后、或同时生成的进程太多时,系统提示BDE出错,内存不足。进而导致进程
吊死。请问这是什么原因造成的呢?有什么方法可能解决?
 
Query没有释放
 
QUERY都已显式释放,但运行一段时间后,进程多次关闭,重新运行后,还是会出现
类似的情况。
 
首先检查你的其他资源是否正确释放//也就是确定是BDE问题
如果是,则打开BDE的Administrator的configuration
然后修改里面的System-Init里的各项指标!
具体的各项含义和你需要设定的值请自己查看有关BDE帮助
 
应该是没释放的问题。
 
1. BDE配置。
2. 变量及时释放。用完后就释放。
 
运行BDEADMIN,在config项里有个sharedmemsize和maxbufsize默认是2048,改大一点就行了,不过我试
过,运行多线程查询,顶多就开到70个左右,因为每个线程都要动态建立一个session,到70个
就会提示session已经到了最大值.
 
一般是你用的对象没有释放的缘故,不过这个错误不好查找真正的错误的语句的地方
还有可能是bluely所说的
 
很多时候错误是隐含的错误
至于BDE的默认配置确实对于一些应用也是不够
但如果不是多线程并且每个线程都要求有自己独立SESSION的话(很少见)
一般不需要
看你自己的应用吧,如果是单线程就好好检查一下代码
 
线程的查询语句一定要用try.. finally块保护起来,以保证能把所有该释放的东西都释放,
但你的问题的确是因为bde的设置引起的,不信你试试把上述两个值改成4096,就能开大概16个
线程一起查询,如果改成8m,可开的线程又翻一倍,但70个是极限.到了同时开启70个线程查询,
不管你把bde的buffer设置成多大都没有用了,因为session本身已经到了极限.事实上在实际应用
中也没有必要在一个程序中开这么多线程查询,我也是因为好奇才写了一个程序去试的,呵呵.
 
bluely说得对,另外你应该先查查以前的问题.
 
我在编写一个简单的Paradox程序时也遇到此问题
BDE连接 调试时出现内存不足了
关闭Delphi重打开又好了
程序运行也没多大问题
怪了 高手指点一下
 
我也觉得奇怪!
 
去年我写了一个程序,是定时将PaxDox数据导入数据库,几分钟执行一次,
在98下没有问题,在2000下几个小时后报虚拟内存不足,机器奇慢无比
 
up.我也刚碰到这个问题,
每次我都是重启解决的,注销以后好象还是老样子
 
后退
顶部