das ganze ist ganz einfach zu erklären. Bei einem Array werden alle Werte des Arrays hintereinander im Speicher abgelegt. Wenn du jetzt 2000 Einträge im Array haben willst ergibt das 2000 * SizeOf(Record). Das Hauptproblem besteht jetzt darin so viel zusammenhängenden Speicher zu finden. Wenn du das ganze über TList machst, forderst du für jeden Record neu speicher an und die Records stehen nicht unmittelbar hintereinander im Speicher. (und viele kleinen Stücken sind häufiger als ein großes zusammenhängendes stück)
Daraus folgt: Einfach alles auf TList umstellen und dein Problem ist gelöst.
Anwendungsbeispiel:
Delphi-Quellcode:
PMeinRecord = ^TMeinRecord;
TMeinRecord = record
MeineVar: integer;
.
.
.
end;
[...]
fListe: TList; //diese natürlich mit "fliste := TList.Create" initialisieren
[...]
var LRecord: PMeinRecord;
begin
new(LRecord);
LRecord^.MeineVar := 0; //oder halt deine values;
[...]
fListe.Add(LRecord); //Kann dann später wieder über "PMeinRecord(fListe.Items[x])^.MeineVar" etc. angesprochen werden.
end;
Zum freigeben dann einfach
Delphi-Quellcode:
var LCount: Integer;
begin
for LCount := 0 to fListe.Count - 1 do
dispose(fListe.Items[LCount]);
fListe.Free;
end;