当客户端、数据库服务器在同一台机器上运行时,客户端内存不断增大,各位有无什么高招? ( 积分: 50 )

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

lonanodo

Unregistered / Unconfirmed
GUEST, unregistred user!
如果在不同的机器上确没有这个问题。搞不明白。欢迎参加讨论。
 
什么程序,什么内容,什么环境?<br>什么都没有让别人玩猜迷啊
 
c/s,在客户端用时间控件来循环访问数据表并显示数据.这和我的串口服务器没有关系.2000server
 
应该是程序的BUG,是不是什么没有被释放或者什么的。
 
没有free掉,close掉该close,free的东东,本机速度快,当然明显
 
兄弟:问题不是明显不明显的问题,而是一种不停的长,另一种就不长.另外我也想对程序改进一下.如何在Timer中实时查询数据,而不增加内存?数据显示在DBGrid中.用线程?<br>我想在Timer中动态创建TADOQuery,查询完后free.但是单步凋试时发现,第二次创建时就没有数据显示了.为什么?代码如下:<br>procedure&nbsp;TFormCZS.ZyTimerTimer(Sender:&nbsp;TObject);<br>var&nbsp;TemQ:TADOQuery;<br>begin<br>&nbsp;&nbsp;self.ZyTimer.Enabled:=false;&nbsp;&nbsp;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;TemQ&nbsp;=&nbsp;nil&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ:=TADOQuery.Create(nil);<br>&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Connection&nbsp;:=ADOConnection1;<br>&nbsp;&nbsp;&nbsp;&nbsp;Zysource0.DataSet&nbsp;:=&nbsp;TemQ;//和TDataSource绑定<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.SQL.Add('select&nbsp;dw,sl,spname,spm,rq&nbsp;from&nbsp;shc_dzcYds_1&nbsp;where&nbsp;bz=:Pbs&nbsp;order&nbsp;by&nbsp;rq&nbsp;DESC');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Parameters.ParamByName('Pbs').Value:=TaskID;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Open;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bsSkinMessage1.MessageDlg('操作shc_dzcYds_1数据表有误2!',mtInformation,mbOKCancel,1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Free&nbsp;;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;self.ZyTimer.Enabled:=true;<br><br>end;
 
兄弟:问题不是明显不明显的问题,而是一种不停的长,另一种就不长.另外我也想对程序改进一下.如何在Timer中实时查询数据,而不增加内存?数据显示在DBGrid中.用线程?<br>我想在Timer中动态创建TADOQuery,查询完后free.但是单步凋试时发现,第二次创建时就没有数据显示了.为什么?代码如下:<br>procedure&nbsp;TFormCZS.ZyTimerTimer(Sender:&nbsp;TObject);<br>var&nbsp;TemQ:TADOQuery;<br>begin<br>&nbsp;&nbsp;self.ZyTimer.Enabled:=false;&nbsp;&nbsp;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;TemQ&nbsp;=&nbsp;nil&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ:=TADOQuery.Create(nil);<br>&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Connection&nbsp;:=ADOConnection1;<br>&nbsp;&nbsp;&nbsp;&nbsp;Zysource0.DataSet&nbsp;:=&nbsp;TemQ;//和TDataSource绑定<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.SQL.Add('select&nbsp;dw,sl,spname,spm,rq&nbsp;from&nbsp;shc_dzcYds_1&nbsp;where&nbsp;bz=:Pbs&nbsp;order&nbsp;by&nbsp;rq&nbsp;DESC');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Parameters.ParamByName('Pbs').Value:=TaskID;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Open;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bsSkinMessage1.MessageDlg('操作shc_dzcYds_1数据表有误2!',mtInformation,mbOKCancel,1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;TemQ.Free&nbsp;;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;self.ZyTimer.Enabled:=true;<br><br>end;<br><br>我在TemQ.Open;后加一句Query1.recordset:=TemQ.recrodSet;将结果集转出.就搞定了.<br>可是新问题又来了.当查询求和时上面的方法还是不行.我决定将查询的工作交给数据库,<br>用存储过程.但是Oracle的存储过程有点难搞,特别是创建参数时和多参数的传入,传出时,容易出错.各位如有现成的代码,请发出来支持一下.先谢过了!!
 
可能是某些动态创建的资源未释放,使其常驻内存,所以内存会不段增大。另外,我看了一下你写的程序,你将AdoQuery定义为局域变量,这样每次Timer触发该事件时AdoQuery都要被重新创建和释放,这样会非常慢的。你可以将其定义为全局的,在窗体的FormShow或FormCreat中对其创建(…Create(self)),会随着窗体关闭而释放。
 
to&nbsp;guang_guang.说的有理,使用控件得了,因为窗体要到工作完成以后才关闭。我试试看先。访问数据库的问题大家有什么看法,请继续发表意见。
 
创建的控件有问题..我也遇到过....后来就直接用控件了...
 
同意楼上
 
后退
顶部