Moin!
Folgendes Szenario (stark vereinfachter Pseudocode):
Delphi-Quellcode:
var
I: Integer;
L: TObjectList;
O: TObject;
begin
L:= TObjectList.Create(TRUE);
L.Capacity:= 17000;
for I := 0 to 17000 do begin
O:= TObject.Create;
O.DoSomething;
L.Add(O);
end;
end;
Ohne L.Add dauert der Spaß ~ 3 Sekunden, mit L.Add 14 Sekunden. Das Erzeugen der Objekte und die Aktionen mit ihnen sind definitiv nicht das Problem, 3 Sekunden wären hier durchaus akzeptabel. Doch warum ist TObjectList so inperformant? Ich habe es testweise mit TObjectList aus System.Contnrs, TObjectList aus System.Generics.Collections und mit einem dynamischen Array of TObject (
SetLength(L, 17000)
, nicht mit sowas wie
SetLength(L, Length(L)+1)
) versucht. Die Misere ist überall die selbe.
Weiterhin ist mir aufgefallen, dass das Programm nach dem Erzeugen der Objekte beim Beenden der Anwendung ebenfalls extrem lange braucht um die Objekte wieder freizugeben.
Für Tips wäre ich sehr dankbar.
Grüße
Cody