There is two service written in Delphi. One service is run at server and the other service are run at clients. These two services communicate to exchange data between client and server. In this case server service ask clients to send data, However after a day or so the allocated memory on server exceeds it's physical size. After some research I found something is wrong in these two functions below.
Do I have memory leak in following code ?
Server Service:
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;
Data is in class TLogInClass
and the result is returned as a generic list of class TLogInClass
using TDSServer
.