Moin.
Ich habe eine TList, mit der ich etwa 120.000 Records verwalte. Nun müssen davon einige gelöscht werden. Ich habe das zuerst im MachWasTeil gemacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| for i := Pred(MainList.Count) downto 0 do begin [...] if MussDochNicht then MainList.Delete(i) end; MainList.Capacity := MainList.Count; |
Ich dachte mir, das sei vielleicht etwas langsam und baute obiges Beispiel dann um:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| for i := Pred(MainList.Count) downto 0 do begin [...] if MussDochNicht then MainList[i] := nil end;
[...] MainList.Pack; MainList.Capacity := MainList.Count;
for i := Pred(MainList.Count) downto 0 do if MainList[i] = nil then MainList.Delete(i); MainList.Capacity := MainList.Count; |
Methoden (1) und (2) sind in etwa gleichschnell bzw. langsam. Gibt es noch eine andere Möglichkeit, an die ich nicht gedacht habe? Es ist schon erstaunlich, dass die TList schneller gefüllt / bearbeitet wird, als Einträge gelöscht werden können.
Christian
Moderiert von
Tino: Topic aus Sonstiges verschoben am Mi 11.05.2005 um 10:53