我的程序运行次数一多,就使机器死机,请指点是什么原因!(200)

  • 主题发起人 主题发起人 songyuanhai
  • 开始时间 开始时间
S

songyuanhai

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个数据库管理软件,使用数据模块存放adotable或者adoquery,大约有6个adotable组件和3个adoquery组件加上9个datasource组件,各个界面都设置好,程序编辑通过,运行正常,但是,我这个程序运行一次可以,运行次数多了就死机了,运行次数大约在5次,就造成机器彻底死机,只能关电源重启。请问是什么原因,应该是什么占用了大量的内存资源,没有释放吧,但是我不知道怎么释放,请指点!
 
是否在程序退出的时候,对各种资源进行释放?应该怎么进行释放?
 
try.....finallyXX.FREE;
 
在进程里看看,应该是没有完全释放的原因。
 
作为应用程序应该如何才能让程序完全释放?
 
大约有6个adotable组件和3个adoquery组件加上9个datasource组件?有必要用这么多吗?可以在程序里动态创建adoquery,使用后在Free。关键是我觉得你可以优化一下代码或控件
 
来自:szhcracker, 时间:2009-2-12 13:41:38, ID:3943462 大约有6个adotable组件和3个adoquery组件加上9个datasource组件?有必要用这么多吗?可以在程序里动态创建adoquery,使用后在Free。关键是我觉得你可以优化一下代码或控件 我基本上是用到的表都建立了adotable或者adoquery,造成机器死机的是这个原因吗?在用到数据表的时候再建立,用完后在释放吗?这样对于连接远程数据库来说是否会影响传输速度?
 
应该不是这个原因,除非是数量量级别在百万以上,才有可能
 
那到底是什么原因呢?急呀!
 
建议尽可能用ADOQuery,用的时候打开,不用的时候关掉,退出窗口的时候也关掉
 
我建议你加一个数据类,相关的控件放在这个类界面上,所有的查询及SQL命令执行都由它的相关方法去完成,类似于下面的代码:function ExecSQL(ClientDataSet: TClientDataSet; strSQL: String; AParams: TParams = nil): Boolean;begin Result := False; with RSqlquery do begin ClearSQLParams; SQL.Text := strSQL; AddSQLParams(SQL, AParams); ExecuteSQL; Result := True; if Length(RSqlquery.XMLData) = 0 then Exit; end; if Assigned(ClientDataSet) then with ClientDataSet do begin if Active then Close; XMLData := RSqlquery.XMLData[0]; Open; end;end;RSqlquery 是一个 TRemoteSqlquery。数据会放到一个 ClientDataSet 中,调用如下:procedure TFrmDemo.QueryCard;var oSQL: string; Cds: TClientDataSet;begin Cds := TClientDataSet.Create(nil); oSQL := '...'; ExecSQL(Cds, oSQL); ...;end;以上是一个简单的示例,原理都差不多。
 
楼上的,简直不知所云
 
你用的是不是oracle数据库?如是应加Commit语句,你这个有种可能是数据库锁定
 
你用的是不是oracle数据库?如是应加Commit语句,你这个有种可能是数据库锁定我用的是SQL server数据库,数据库锁定应该如何解?
 
建议:1、动态建立;动态释放。2、运行完毕,应FREE。3、检查数据库,是否调用太多。4、重复创建的某一同类的类太多。
 
问题仍然没有解决,我再试试各位所提的这些方面看看能不能解决,先给大家分哈
 
后退
顶部