真烦,这么晚还在加班ing...由于某些原因,我将以下语句写在了循环中(三层结构),
for c := 0 to i do
begin
  ...
  cds.Close;
  cds.CommandText := '......';
  cds.Open
  ...
end;当循环次数不变时,反复执行此循环,内存上涨较小(1%左右),但是当i取较大的值时,如3000,内存涨得非常厉害,SQL大概用了150M内存(但反复执行上涨也不大,只是系统响应非常缓慢),我想问,是不是我的sql没有写对?或者,SQL SERVER在执行大量查询时本身就会消耗掉大量内存?当然,我是不得以在必须要在循环中写查询语句的。随便问一句,对于数据集,我一口气取出所有要的记录,然后在循环中一步一步通过Filter来返回特定的记录集,这样对内存的消耗是否少些?我的程序的循环极限值大概在20000左右。

解决方案 »

  1.   

    这样应该要的,因为Sqlserver一直在执行查询,如果你每次循环延时一下就会好多了
    for c := 0 to i do
    begin
      ...
      cds.Close;
      cds.CommandText := '......';
      cds.Open
      sleep(50);
      ...
    end;
    延时50MS对你根本没影响,对他就不同了
      

  2.   

    每次动态创建数据库查询控件,查的结果没用时,把控件free掉,并执行控件:=nil;(eg:  cds:=nil),这样可能能够减小内存消耗。