Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Frage zum Aneinanderhängen von Strings

  Alt 3. Mär 2010, 08:12
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 Delphi-Referenz durchsuchenStringOfChar
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
$2B or not $2B
  Mit Zitat antworten Zitat