В Delphi есть две службы. Одна служба запускается на сервере, а другая служба выполняется на клиентах. Эти две службы обмениваются данными между клиентом и сервером. В этом случае серверная служба просит клиентов отправлять данные, однако через день или около того выделенная память на сервере превышает ее физический размер. После некоторых исследований я обнаружил, что что-то не так в этих двух функциях ниже.Имеет ли этот код Delphi утечку памяти?
У меня есть утечка памяти в следующем коде? Сервис
Сервер:
function TServerMethods.LogInMngr_GetAllUsers(): TList<TLogInClass>;
Var
C: TDBXCommand;
Begin
C := CreateCommand('LogInMngr_GetAllUsers');
try
C.ExecuteUpdate;
Result := GetValue<TList<TLogInClass>>(C.Parameters[RP]);
finally
C.Free;
end;
end;
Client Service:
function TLogInMngrClass.GetAllUsers(status: TLogInStatus = lisUnknown): TList<TLogInClass>;
var
LogIn: TLogInItem;
LogInTemp: TLogInClass;
UsedProg: TUsedItem;
begin
Result := TList<TLogInClass>.Create;
for LogIn in LogInList do
if (status = lisUnknown) or (LogIn.Status = Integer(status)) then
for UsedProg in LogIn.UsedProgList do
begin
LogInTemp:=TLogInClass.Create(LogIn.ClientID, LogIn.ComputerName, LogIn.UserName, '', '');
LogInTemp.LogInTime := DateTimeToFileTime(UsedProg.AccessTime);
LogInTemp.Status := LogIn.Status;
LogInTemp.ProgName := UsedProg.ItemName;
LogInTemp.ProgVersion := UsedProg.ItemInfo;
Result.Add(LogInTemp);
end;
end;
данных в классе TLogInClass
и результат возвращается в общий список класса TLogInClass
с помощью TDSServer
.
«* Имеет ли этот код delphi утечку памяти?» «Наверное, да, но в коде, который вы опубликовали, нет никаких доказательств. Нет никаких доказательств того, как освобождается «TList». Также это должен быть 'TObjectList', который владеет значениями, но это всего лишь предположение, что ответы будут –
fantaghirocco
Вы не показываете, как оба результата' TList 'освобождены. Пожалуйста, добавьте эту информацию. –
Либо создайте [mcve], либо выполните некоторую отладку. –