Thema: Delphi Stringliste Umkehren

Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#26

Re: Stringliste Umkehren

  Alt 15. Mär 2008, 11:40
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]
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat