【发布时间】:2019-02-26 05:46:07
【问题描述】:
如何防止 TFDQuery 在使用 TIdTcpServer 运行的应用程序中导致过多的内存消耗?
我在运行时创建 TFDQuery,使用后我在 TIdTcpServer 的 OnExecute 事件中销毁它:
Query := TFDQuery.Create(Cn);
Query.Connection := Cn;
Query.SQL.Text := 'update table set column = 0 where ip = :ip';
Query.Params.ParamByName('ip').Value := ip;
Query.ExecSQL;
FreeAndNil(Query);
每个新连接都在 MSSQL 上执行选择/插入/更新,所以我总是创建/销毁对象,但内存仍在增加(我正在与在 TcpServer 上创建各种连接的客户端进行测试)
我已经测试过了,如果我从 OnExecute 应用程序内存中删除 TFDQuery,测试时总是可以的。
cn 是始终处于活动状态的 TFDConnection,在应用程序启动时创建并在应用程序关闭时销毁。
【问题讨论】:
-
这意味着原始代码引发了一个你没有捕捉到的异常,绕过了对
FreeAndNil(Query)的调用,通过添加try..finally块修复了这个问题 -
我已回滚您的编辑。如果您找到了解决方案并想分享它,请在下方专为此目的设计的空间中发布答案。见Can I answer my own question?。
-
为什么每次都要经历创建/释放 FDQuery 的复杂过程?为什么不直接打电话给
Cn.ExecSql()?