О FDQuery с TIdTcpServer - PullRequest
       17

О FDQuery с TIdTcpServer

0 голосов
/ 25 февраля 2019

Как я могу предотвратить чрезмерное использование памяти, которое вызывает TFDQuery при работе приложения с TIdTcpServer?

я создаю TFDQuery во время выполнения и после использования уничтожаю его при событии OnExecute в TIdTcpServer:

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)

я уже протестировал, и если я удаляю TFDQuery из памяти приложения OnExecute, то всегда будет в порядке на тестах.

cn - это TFDConnection, которые всегда активны и создаются при запуске приложения и уничтожаются при закрытии приложения.

1 Ответ

0 голосов
/ 26 февраля 2019

Решено с помощью этого метода создания / уничтожения во время выполнения:

with TFDQuery.Create(nil) do
        begin
          try
            Connection := Cn;
            SQL.Text := 'update table set column = 0 where ip = :ip';
            Params.ParamByName('ip').Value := ip;
            ExecSQL;
          finally
            Free;
          end;
        end;
...