Each execution of the query raises memory consumption of the application.
The memory only gets freed on application close.
In the following example the memory consumption raises from approximately 3.5 MB to 26 MB.
Though if i am connecting to SQL Server or MySQL, the memory gets released after each destruction of TUniQuery.
I am using UniDAC 7.3.9. for RAD Studio 10.2.3.
Sample code:
Code: Select all
uses
Uni,
Winapi.PsAPI;
procedure TfrmUniQueryTest.btnOracleQueryClick(Sender: TObject);
function CurrentProcessMemory(): Cardinal;
var
MemCounters: TProcessMemoryCounters;
begin
Result := 0;
MemCounters.cb := SizeOf(MemCounters);
if GetProcessMemoryInfo(GetCurrentProcess, @MemCounters, SizeOf(MemCounters)) then
Result := MemCounters.WorkingSetSize
else
RaiseLastOSError;
end;
var
DBConnection: TUniConnection;
DBQuery: TUniQuery;
idx: Integer;
memBegin, memEnd: Cardinal;
begin
lbMemory.Clear();
DBConnection := TUniConnection.Create(nil);
try
DBConnection.Server := 'DBServer';
DBConnection.Username := 'USR';
DBConnection.Password := 'PWD';
DBConnection.ProviderName := 'Oracle';
DBConnection.Connect();
memBegin := CurrentProcessMemory();
for idx := 0 to 5000 do
begin
DBQuery := TUniQuery.Create(nil);
try
DBQuery.Connection := DBConnection;
DBQuery.SQL.Text := 'select 1 from dual;';
DBQuery.Open();
DBQuery.Close();
finally
DBQuery.Free();
end;
end;
memEnd := CurrentProcessMemory();
lbMemory.Items.Add(memBegin.ToString());
lbMemory.Items.Add(memEnd.ToString());
finally
DBConnection.Free();
end;
end;