我写了一段代码:
query1.close;
query1.sql.clear;
query1.sql.add('select * from tab');
query1.open;query1.close;这段代码每执行一次,在Windows的任务管理器中看到其所占的内存就增加一点,不知是何原因?该如何解决呢?
query1.close;
query1.sql.clear;
query1.sql.add('select * from tab');
query1.open;query1.close;这段代码每执行一次,在Windows的任务管理器中看到其所占的内存就增加一点,不知是何原因?该如何解决呢?
query1.close;
query1.sql.clear;
query1.sql.add('select * from tab');
query1.open;query1.Active:=False; //看看
但windows2000以上一定会自动释放!
难道没有人遇到过这种问题吗?
用了后就删除。
不过在你动态的创建过程中一定要uses dbtables
而逐步增加内存的,当增加到一定程序时就不会再增加了。
我的客户端程序一次还增加一M呢,当增加到八十M时就不增加了。
当你的客户端增加到使用八十M后,如果你不去动你的客户端,一会它又会变小了,
这是OS在自动释放,这类似于.Net里面的一个……叫什么概念忘记了。
QUEERY。FREE并不真正释放内存,而是类似一个池的概念。等下次在创建TQUERY时。他会自动把上次已经创建好的内存块,分配给他。
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.