我写了一段代码:
query1.close;
query1.sql.clear;
query1.sql.add('select * from tab');
query1.open;query1.close;这段代码每执行一次,在Windows的任务管理器中看到其所占的内存就增加一点,不知是何原因?该如何解决呢?

解决方案 »

  1.   

    这不是内存泄漏吧.
    query1.close;
    query1.sql.clear;
    query1.sql.add('select * from tab');
    query1.open;query1.Active:=False;  //看看
      

  2.   

    应该不是内存泄漏.不知楼主用的是什么操作系统,windows98不知能不能自动释放,
    但windows2000以上一定会自动释放!
      

  3.   

    执行query1.free后,query1就不能使用了!
    难道没有人遇到过这种问题吗?
      

  4.   

    你动态创建TQUER试试。
    用了后就删除。
      

  5.   

    同意楼上的 
    不过在你动态的创建过程中一定要uses dbtables
      

  6.   

    如果只是临时用一下,建议采用动态创建,然后Free的方式
      

  7.   

    哈哈,增加一点很正常啊.有时候windows会自动调整内存的,是为了优化程序性能而增加的,
    而逐步增加内存的,当增加到一定程序时就不会再增加了。
    我的客户端程序一次还增加一M呢,当增加到八十M时就不增加了。
      

  8.   

    to superyys(无血野人) 
    当你的客户端增加到使用八十M后,如果你不去动你的客户端,一会它又会变小了,
    这是OS在自动释放,这类似于.Net里面的一个……叫什么概念忘记了。
      

  9.   

    TQUERY是有这个问题 。好象是DELPHI故意这样做的吧。
    QUEERY。FREE并不真正释放内存,而是类似一个池的概念。等下次在创建TQUERY时。他会自动把上次已经创建好的内存块,分配给他。
      

  10.   

    constructor TQuery.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FSQL := TStringList.Create;
      TStringList(SQL).OnChange := QueryChanged;
      FParams := TParams.Create(Self);
      FDataLink := TQueryDataLink.Create(Self);
      RequestLive := False;
      ParamCheck := True;
      FRowsAffected := -1;
    end;destructor TQuery.Destroy;
    begin
      Destroying;
      Disconnect;
      SQL.Free;
      FParams.Free;
      FDataLink.Free;
      StrDispose(SQLBinary);
      inherited Destroy;
    end;
    above is cut form unit dbtables,  where do u find spool ? it seem not used in this unit.