Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
25. Dez 2012
Das Beste, was ich bis jetzt gefunden habe: DCPbase64 aus DCPcrypt v2.0 (Copyright (c) 1999-2002 David Barton):
for i := 1 to 1000000 do // 1 Million
DCPbase64.Base64DecodeStr(DCPbase64.Base64EncodeStr('Tᾯest ♀♥♂')); // 0,5 Sekunden
Ist wirklich wesentlich schneller als die bisher besprochenen Encodier-Routinen.
Edit: Mit der neuesten Version: 0,2 Sekunden (1 Million Durchläufe der...
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Du hast recht. FurtbichlerStrToHex ist etwa doppelt so schnell wie MyStrToHex. Ich habe es getestet, indem ich die Funktion 1 Million mal ausgeführt habe:
1 Million Ausführungen:
FurtbichlerStrToHex: Ca. 75 Millisekunden
MyStrToHex: Ca. 135 Millisekunden
Ist FurtbichlerStrToHex fehleranfälliger als MyStrToHex?
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Und das Ergebnis ist auch ein völlig anderes:
Self.Caption := FurtbichlerStrToHex('Tᾯest ♀♥♂');
// Ergebnis: 001F00000000262626
Self.Caption := MyStrToHex('Tᾯest ♀♥♂');
// Ergebnis: 00541FAF0065007300740020264026652642
Das Ergebnis von MyStrToHexist korrekt. Ich habe es überprüft, indem ich die Umkehrfunktion auf das Ergebnis angewendet habe, um wieder den Ausgangsstring zu erhalten.
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Mhmm, irgendwas scheint da nicht zu funktionieren - das Programm braucht nun ca. 100 mal länger als vorher, um den Code auszuführen. Ich verstehe den Code nicht, deswegen kann ich nicht sagen, wo der Fehler liegt.
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Ich dachte, mit inline kann man Funktionen beschleunigen, die sehr oft aufgerufen werden?
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Meinst du die Länge des an die Funktion übergebenen Strings s oder die Konstante 4?
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Bzw. hier die StringBuilder-Version mit hinzugefügtem const-Modifier:
function MyHexToStr(const s: string): string;
var
i, L: Integer;
SB: TStringBuilder;
begin
Result := '';
L := Length(s);
i := 1;
SB := TStringBuilder.Create;
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Für die Umkehrfunktion verwende ich folgende Konstruktion:
function MyStrToIntSafe(const Value: string; const ExceptionResult: Integer): Integer; inline;
begin
try
Result := StrToInt(Value);
except
Result := ExceptionResult;
end;
end;
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Vielen Dank für den Tipp! Diese Version ist tatsächlich noch schneller als die StringBuilder-Version!
Ich habe mir auch überlegt, ob man den Schleifeninhalt nicht etwa in eine inline-Funktion auslagern kann, um die Geschwindigkeit nochmal zu steigern, sehe aber keine Möglichkeit dafür.
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Du meintest wahrscheinlich so:
function MyStrToHex(s: string): string;
var
i: Integer;
SB: TStringBuilder;
begin
Result := '';
SB := TStringBuilder.Create;
try
for i := 1 to Length(s) do
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
24. Dez 2012
Meinst etwa so?:
function MyStrToHex(const s: TStringBuilder): TStringBuilder;
var
i: Integer;
begin
Result := TStringBuilder.Create;
for i := 0 to s.Length - 1 do
Result.Append(IntToHex(Ord(s.Chars), 4));
end;
Forum: Object-Pascal / Delphi-Language
Delphi
by PeterPanino,
23. Dez 2012
Hallo! Ich möchte folgende Funktion auf extreme Geschwindigkeit optimieren:
function MyStrToHex(s: string): string;
var
i: Integer;
begin
Result := '';
for i := 1 to Length(s) do
Result := Result + IntToHex(Ord(s), 4);
end;
Kennt jemand eine Assembler-Version davon?