Zitat von
Neutral General:
Also konkret:
Delphi-Quellcode:
var Str1, Str2: String;
begin
// Str1
Str1 := '';
for i:= 1 to 100000 do
Str1 := Str1 + 'A';
// Str2
SetLength(Str2,100000);
FillChar(Str2[1],100000,0);
for i:= 1 to 100000 do
Str2 := Str2 + 'A';
Du meintest wohl
Delphi-Quellcode:
// Str2
SetLength(Str2, 100000);
//FillChar(Str2[1], 100000 * SizeOf(Char), 0);
for i := 1 to 100000 do
Str2[i] := 'A';
Denn sonst ist die 2 noch langsamer, da sie schon mit einem größerem Ausgangsstring genau das Selbe (in Bezug auf die Schleife) macht.
Delphi-Quellcode:
Var P: PChar;
// Str2
SetLength(Str2, 100000);
P := @Str[1];
for i := 99999 downto 0 do
P[i] := 'A';
Dank 'ner guten Codeoptimierung seitens des Delphicompilers ist dieses mit das Schnellste.
Schneller ist da nur noch dieses (vorallem seit D2006?, wo das FastCodeProjekt in Delphi integriert wurde)
Delphi-Quellcode:
// Str2 = AnsiString
SetLength(Str2, 100000);
FillChar(@Str2[1], 100000, 'A');
oder gleich
StringOfChar
Str2 := StringOfChar('A', 100000);
Dieses
Delphi-Quellcode:
Str1 := '';
for i:= 1 to 100000 do
Str1 := Str1 + 'A';
enspricht ja
Code:
Str1 leeren (falls noch nicht leer)
Schleife mit 100.000 Durchgängen
neuen String mit Länge ( Length(Str1) + Length('A') ) reservieren
beide Strings in den neuen String reinkopieren
alten String Str1 freigeben
Variable Str1 durch neuen String ersetzen.
Ende der Schleife