Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Brauche Array und Record Alternative

  Alt 15. Okt 2004, 16:51
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat