Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: Frage zum Aneinanderhängen von Strings

  Alt 3. Mär 2010, 07: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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat