Zitat von
Hansa:
Es sind fast 400.000 Zeilen. Add hat gegenüber exchange einen geringen Vorteil von 0,7 % = 3 Sek.
Putz mal Deine Brille! Wie hast Du denn das gemessen? Bei meinem nicht taufrischen Laptop habe ich für Add 89 ms und für Exchange 10 ms (400000 x 80 Byte). Ausserdem belegt die Add-Methode doppelt so viel Speicher, ist also nicht skalierbar:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
NUM_ENTRIES = 400000;
ENTRY = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789AAAA'+
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789AAAA';
var
slDown : TStringlist;
slUp : TStringList;
i, j : integer;
dtStart : TDateTime;
begin
Button1.Enabled := False;
// Füllen
slDown := TStringList.Create;
slDown.Capacity := NUM_ENTRIES;
for i := 0 to NUM_ENTRIES-1 do
slDown.add(ENTRY);
Button1.Enabled := True;
// Methode mit Add
slUp := TStringList.Create;
dtStart := Now;
for i := slDown.Count-1 downto 0 do
slUp.Add(slDown[i]);
ShowMessage(Format('Add %d ms', [MillisecondsBetween(Now, dtStart)]));
slUp.Free;
// Methode mit Exchange
dtStart := Now;
j := 0;
for i := slDown.count - 1 downto (slDown.count - 1) div 2 do
begin
slDown.exchange(i,j);
inc(j);
end;
ShowMessage(Format('Exchange %d ms', [MillisecondsBetween(Now, dtStart)]));
slDown.Free;
end;
[edit]
Ahh, ich hab Deine geniale Messmethode erkannt: Du misst wahrscheinlich das Update des Memo mit. Warum trägst Du das ganze nicht noch in eine Datenbank ein und misst das ebenfalls dazu? Das Update des Memo mag ja ein paar Minuten dauern, das will ich mir nicht antun. Dadurch verschwindet die Messdifferenz im Nirvana.[/edit]