![]() |
Re: Stringkonkatenation ist schneller als direktes Kopieren?
Zitat:
Freut mich, dass meine Frage zu einer so regen Diskussion geführt hat :mrgreen: Ich hoffe es kommt auch noch was schnelles dabei raus :zwinker: |
Re: Stringkonkatenation ist schneller als direktes Kopieren?
Zitat:
Delphi-Quellcode:
type
THackedStringList = class(TStrings) // funktioniert nur noch mit echten TStringList Klassen public FList: PStringItemList; end; function V2(s: TStringList): Integer; var l, i, j, n: Integer; z: PChar; x: String; Arr: array of record Data: PChar; Len: Integer; end; begin n := 0; SetLength(Arr, s.Count); for i := 0 To s.Count - 1 Do begin Arr[i].Data := Pointer(THackedStringList(s).FList[i].FString); // kein CPU LOCK mehr Arr[i].Len := Length(PString(@Arr[i].Data)^); Inc(n, Arr[i].Len); end; SetLength(x, n); j := 0; // PChar startet bei 0 for i := 0 To High(Arr) do begin z := Arr[i].Data; l := Arr[i].Len; Move(z^, PChar(PChar(Pointer(x)) + j)^, l * SizeOf(Char)); // kein UniqueString aufrufen Inc(j, l); end; Result := Length(x); end; |
Re: Stringkonkatenation ist schneller als direktes Kopieren?
@jbg: Wir argumentieren doch immer so, das bei einer Stringkonkatenation (hier) 1 Mio mal neuer Speicher angefordert und der String umkopiert werden muss, und das dauert und daher sollte man V2 nehmen. Wir alle predigen das, und das basiert ja i.A. auf eigenen Erfahrungen.
Wenn man das dann mal manifestieren will (sozusagen als Demo fur Dummies), fällt man so richtig (aber so richtig!) auf die Plautze. Ehrlich gesagt bin ich etwas verwirrt. |
Re: Stringkonkatenation ist schneller als direktes Kopieren?
Zitat:
Zum anderen kommen bei heutigen Systemen mehrere CPUs ins Spiel. Dort sind die CPU LOCKs (derer gleich drei Stück in LStrAsg enthalten sind) teurer, weil ja tatsächlich eine andere CPU auf den Speicher zugreifen könnte. Davon sind Hyperthreading Prozessoren ebenfalls betroffen. Zitat:
Zitat:
|
Re: Stringkonkatenation ist schneller als direktes Kopieren?
Bei mir ist selbst bei FastMM4 die Konkatenation schneller.
Ich schließe daraus, das wir uns nicht mehr so sehr um Performance scheren müssen, sondern eher die Verfahren optimieren können. Delphi und moderne MMS kompilieren das schon recht ordendlich. Ich persönlich finde das beruhigend, weil ich -ehrlich gesagt- nicht ständig mit irgendwelchen Tricks rumhantieren muss, sondern mich auf Algorithmen und Verfahren konzentrieren kann. Danke für die Analysen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz