Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12

Re: Stringkonkatenation ist schneller als direktes Kopieren?

  Alt 19. Mär 2008, 21:37
Zitat von Meflin:
Ich hoffe es kommt auch noch was schnelles dabei raus
Klar geht es noch schneller. Nur wird es dann ziemlich lowlevelig und spezialisierter.

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;
  Mit Zitat antworten Zitat