Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Zeile aus Stringlist löschen, wie optimieren?

  Alt 14. Feb 2014, 20:12
Wie wäre es mit einer Lösung, die Dein Problem von 2 Minuten
auf 599 Millisekunden reduziert?

Auf meinem (wohl etwas schwachen Rechner) hat Deine ursprüngliche Variante sogar 200527 MS benötigt (statt die von Dir angegebenen 120000 MS).

Manchmal kommt man nur über Umwege zum Ziel:

Delphi-Quellcode:
  //for i := (sl.Count - 1) downto 0 do
    //if sl[i] = '' then sl.Delete(i);

   slTmp := TSTringList.Create;

   for i := 0 to sl.Count - 1 do
     if sl[i] <> 'then slTmp.Add (sl[i]);

   sl.Assign(slTmp);
   slTmp.Free;
Der Trick ist also, eine temporäre Stringliste zu nutzen und dieser Strings aus der eigentlichen Liste hinzuzufügen, wenn diese nicht leer sind.

Anschließend weist Du der alten Liste die neue Liste zu und das wars.
Gründe liegen in der Speicherverwaltung (Referenzen auf Strings und Anordnung im Speicher, usw).

Geändert von Harry Stahl (14. Feb 2014 um 21:12 Uhr)
  Mit Zitat antworten Zitat