![]() |
AW: MyStrToHex extrem schnell
Bzw. hier die StringBuilder-Version mit hinzugefügtem const-Modifier:
Delphi-Quellcode:
Scheint nochmals um eine kleine Spur schneller zu sein.
function MyHexToStr(const s: string): string;
var i, L: Integer; SB: TStringBuilder; begin Result := ''; L := Length(s); i := 1; SB := TStringBuilder.Create; try while i < L do begin SB.Append(MyHexToChar(s, i)); Inc(i, 4); end; Result := SB.ToString; finally SB.Free; end; end; |
AW: MyStrToHex extrem schnell
Zitat:
Edit: Doch doch, alles ok. |
AW: MyStrToHex extrem schnell
Zitat:
|
AW: MyStrToHex extrem schnell
Bei ungerader Stringlänge wird der letzte Zugriff auf WordRec(s[i]) über das letzte Zeichen des Strings hinaus gehen.
Edit: Blödsinn, wir reden von WideChars... Ich nehme alles zurück. |
AW: MyStrToHex extrem schnell
Hier ist mein Beitrag; 5x schneller als die Variante von Uwe Raabe. Das Ende der Fahnenstange ist bestimmt noch nicht erreicht.
Delphi-Quellcode:
Type
THexLookup = Array [WideChar] Of Integer; Var HexLookup : ^THexLookup; Procedure BuildHexLookup; Var w : Word; s : String; Begin New(HexLookup); for w := 0 to 65535 do begin s := IntToHex(w,4); Move(s[1], HexLookup^[WideChar(w)],4); end; End; function FurtbichlerStrToHex(const s: Widestring): string; var i : Integer; p : PIntegerArray; begin SetLength(Result, 4*Length(s)); p := @Result[1]; for i := 1 to Length(s) do p^[i-1] := HexLookup^[s[i]]; end; ... initialization BuildHexLookup; |
AW: MyStrToHex extrem schnell
Und wenn man dann auch noch Rangechecks & Co nur für diese Funktion immer abschaltet bekommt man noch ein paar Prozent raus.
|
AW: MyStrToHex extrem schnell
Zitat:
|
AW: MyStrToHex extrem schnell
Zitat:
|
AW: MyStrToHex extrem schnell
Zitat:
Delphi-Quellcode:
Ist also vom Compilat her identisch mit
procedure Step(var A, B: Integer); inline;
begin Inc(A); Inc(B); end; var I, J, N: Integer; begin I := 0; J := I + 1; for N := 1 to 10 do Step(I, J); end;
Delphi-Quellcode:
var
I, J, N: Integer; begin I := 0; J := I + 1; for N := 1 to 10 do begin Inc(I); Inc(J); end; end; Natürlich ist das schneller als der Funktionsaufruf ohne inline, da einige zusätzliche Befehle eingespart werden. Man kann also mit inline einen Funktionsaufruf schneller machen, aber nur wenn tatsächlich ein Aufruf stattfindet. |
AW: MyStrToHex extrem schnell
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 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