我用ADO每1秒查询一次,内存不停增大,请问高手如何释放内存---在线等候! ( 积分: 100 )

  • 主题发起人 主题发起人 xhuhuasoft
  • 开始时间 开始时间
X

xhuhuasoft

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure&nbsp;TfmMain.Timer1Timer(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;i,&nbsp;groupBusy:&nbsp;Integer;<br>&nbsp;&nbsp;callee,&nbsp;callTime:&nbsp;String;<br>&nbsp;&nbsp;dailTime:&nbsp;TDatetime;<br>&nbsp;&nbsp;TempQuery:&nbsp;TADOQuery;<br>begin<br>&nbsp;&nbsp;with&nbsp;ADOQuery1&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;//数据库方式判断白名单<br>&nbsp;&nbsp;&nbsp;{&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('delete&nbsp;from&nbsp;WaitCallBack&nbsp;where&nbsp;Callee&nbsp;not&nbsp;in&nbsp;');<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('(select&nbsp;Callee&nbsp;from&nbsp;WaitCallBack,CanCall&nbsp;where&nbsp;Callee=Number)');<br>&nbsp;&nbsp;&nbsp;&nbsp;ExecSQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('delete&nbsp;from&nbsp;AllCall&nbsp;where&nbsp;Callee&nbsp;not&nbsp;in&nbsp;');<br>&nbsp;&nbsp;&nbsp;SQL.Add('(select&nbsp;Callee&nbsp;from&nbsp;WaitCallBack,CanCall&nbsp;where&nbsp;Callee=Number)');<br>&nbsp;&nbsp;&nbsp;&nbsp;ExecSQL;}<br>&nbsp;&nbsp;&nbsp;&nbsp;//按被叫号码分组锝出待呼叫的记录<br>&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('select&nbsp;Callee&nbsp;from&nbsp;WaitCallBack&nbsp;group&nbsp;by&nbsp;Callee');<br>&nbsp;&nbsp;&nbsp;&nbsp;Open;<br>&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;TempQuery&nbsp;:=&nbsp;TADOQuery.Create(nil);<br>&nbsp;&nbsp;TempQuery.Connection&nbsp;:=&nbsp;ADOConnection1;<br><br>&nbsp;&nbsp;while&nbsp;not&nbsp;ADOQuery1.Eof&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;//取分组后当前组的被叫号<br>&nbsp;&nbsp;&nbsp;&nbsp;callee&nbsp;:=&nbsp;Trim(ADOQuery1.FieldByName('Callee').AsString);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;//查出所有呼叫过此被叫的主叫号<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;TempQuery&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('select&nbsp;*&nbsp;from&nbsp;WaitCallBack&nbsp;where&nbsp;Callee=:Callee&nbsp;order&nbsp;by&nbsp;DailTime');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('Callee').Value&nbsp;:=&nbsp;callee;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;eCalleeForFirst.Text&nbsp;:=&nbsp;callee;<br>&nbsp;&nbsp;&nbsp;&nbsp;eCalleeForSecond.Text&nbsp;:=&nbsp;Trim(TempQuery.FieldByName('Caller').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;callTime:=FormatDatetime('hh:mm',TempQuery.FieldByName('CallTime').AsDateTime);<br>&nbsp;&nbsp;&nbsp;&nbsp;dailTime:=TempQuery.FieldByName('DailTime').AsDateTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;groupBusy:=TempQuery.FieldByName('GroupBusy').AsInteger;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(dailTime&lt;Now)&nbsp;and&nbsp;(groupBusy&lt;&gt;1)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//依次从每个pcm上选择中继通道直到有通道可用来呼出<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=1&nbsp;to&nbsp;11&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if(StartDailOut(StrToInt(combPcmForFirst.Text)+i,eCalleeForFirst.Text,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StrToInt(combPcmForSecond.Text)+i,eCalleeForSecond.Text))=true&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;//到下一组<br>&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery1.Next;<br>&nbsp;&nbsp;end;<br><br>end;
 
TempQuery&nbsp;要自己释放<br>在过程最好添加&nbsp;TempQuery.free;
 
还是用<br>try&nbsp;<br>&nbsp;&nbsp;TempQuery&nbsp;:=&nbsp;TADOQuery.Create(self);<br>&nbsp;&nbsp;TempQuery.Connection&nbsp;:=&nbsp;ADOConnection1;<br>&nbsp;&nbsp;...<br>finally&nbsp;<br>&nbsp;&nbsp;TempQuery.free;&nbsp;&nbsp;<br>end<br>比较好.<br>或者加一个永久的tempQuery,不用考虑内存释放,&nbsp;窗体释放时一起内存回收
 
循环里面在不停的创建ADOQuery~<br><br>最好在循环外创建一个永久连接(3868474的意思)
 
不用又不释放,一直在用内存,肯定慢呀
 
创建TempQuery&nbsp;需释放
 
一直在窗体里不停的创建TempQuery,又不free掉,不慢就怪了
 
没看出来&nbsp;你为什么加动态创建TempQuery??<br>动态创建最好用&nbsp;try&nbsp;..finnally...end
 
后退
顶部