Hi everyone,

I have a query about records + their memory usage.

I've created a record to hold a couple of values, which I then do a
quicksort (a separate procedure) on.

The drama is, the code never gets the chance to do the quicksort due to
the record consuming RAM at an unbelievable rate - hundreds of MB of RAM
until I get the "Out of Memory" error.

The values I'm loading into the record are a subset from a file only
1.01Mb in size (I've loaded the file into a TClientDataSet).

I tried loading the same values that I was loading into the record into
a TStringList, + the resulting amount of memory used was less than 1Mb
(as it should be).

I also tried using a packed record but that didn't alleviate the problem
(I don't really like packed records either...).

 

The string values I'm loading into the record are only 1 character
each...

 

I don't see how the record is consuming so much memory! The only thing I
can think of at the moment is the way I'm allocating memory to the
record (SetLength).

 

Does anyone have any other ideas??

 

Code is:

 

procedure Process;

type 

  TSortArr = record

    Val: string;

    Rec: cardinal;

end;  //type

 

var

  SortArr: array of TSortArr;

  SortStr: string;

  RowCnt: cardinal;

begin 

  RowCnt := 0;

  while (NOT cdsInputFile.EOF) do

  begin

       SortStr := <data from cds>;

       SetLength(SortArr, RowCnt + 1);

       SortArr[RowCnt].Val := SortStr;

       SortArr[RowCnt].FPos := cdsInputFile.RecNo;    

       Inc(RowCnt);

       ReadRecord;  //get next rec in file

  end;  //while not eof

end;

 

 

Thanks :-)



[Non-text portions of this message have been removed]

Reply via email to