My client application receive from application server (DataAbstract)
data as Binary packet and unpack it to TMemDataSet. Some time data is
very large for client and application raise exception like
EOutOfMemory.
I want in application show valid message for user and free memory used
in this operation. But when i Close TMemDataSet or Free their. Memory
in application not freed but stay used.
After close application i receive notification about memory leak.
What way to resolve this problem ?
Code in application:
try
DefStreamer.ReadDataset(DataBinary, Result, True, EmptyStr, LoadRecords);
except
on E: EOutOfMemory do
begin
Result.Close; // OR Result.Free();
MessageBoxAEx(‘Message about out of memory’,
csWarning, MB_ICONWARNING + MB_OK);
end;
end;
CallStack:
uDAMemDataset.TDAMemoryDataset.CreateBin2Struct
uDAMemDataTable.TDAMemDataTable.AllocRecordBuffer
uDABin2DataStreamer.TDABin2DataStreamer.InternalDoReadDataset(TDADataTable($A151AA0)
as IDAEditableDataset,56442,(…),False)
uDABin2DataStreamer.TDABin2DataStreamer.DoReadDataset(’{54A826C9-6D7D-4DB4-A46E-5BF527155C06}’,TDADataTable($A151AA0)
as IDADataset,False,False)
uDADataStreamer.TDADataStreamer.ReadDataset(’{54A826C9-6D7D-4DB4-A46E-5BF527155C06}’,TDADataTable($A151AA0)
as IDADataset,True,True,False)
uDADataStreamer.TDADataStreamer.ReadDataset($ABF45E0,TDADataTable($A151AA0)
as IDADataset,True,’’,True,True,False)