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).