Versuch mal spasseshalber, um zu Testen, ob die Random-Funktion die Bremse ist:
Delphi-Quellcode:
procedure Shuffle(List: TStrings);
var
i: Integer;
begin
Randomize;
List.BeginUpdate;
try
for i := 0 to Pred(List.Count) do
List.Exchange(i, (i*991+103) mod List.Count); // 991 & 103=Primzahl
finally
List.EndUpdate;
end;
end;