Code: Alles auswählen
if FormatSettings.DecimalSeparator <> '.') then
begin
P:=Pos(FormatSettings.DecimalSeparator,S);
If (P<>0) Then
S[P] := '.';
end;
Code: Alles auswählen
if FormatSettings.DecimalSeparator <> '.') then
begin
P:=Pos(FormatSettings.DecimalSeparator,S);
If (P<>0) Then
S[P] := '.';
end;
Du kannst ja trotzdem einen Patch einreichen.wp_xyz hat geschrieben: Mi 1. Feb 2023, 14:27 Aber leider sind die umzuwandelnden Strings immer sehr kurz, und die Hauptarbeit in val() ist viel aufwändiger, so dass eine solche "Nano-Optimierung" nicht ins Gewicht fällt...
Danke für den Anschupser - ich habe mich aufgerafft, und mir das ganze näher angesehen und einen Patch daraus gemacht (https://gitlab.com/freepascal.org/fpc/s ... sues/40137). Zusammen mit der String-Wandlung sind dann doch immerhin 20% Beschleunigung herausgekommen.Socke hat geschrieben: Mi 1. Feb 2023, 17:19Du kannst ja trotzdem einen Patch einreichen.wp_xyz hat geschrieben: Mi 1. Feb 2023, 14:27 Aber leider sind die umzuwandelnden Strings immer sehr kurz, und die Hauptarbeit in val() ist viel aufwändiger, so dass eine solche "Nano-Optimierung" nicht ins Gewicht fällt...
Schwerwiegender dürfte die String-Allokation sein. Im Zusammenspiel mit StrToFloat wird ja in TextToFloat ein Pascal-String erzeugt, obwohl vorne in StrToFloat schon ein Pascal-String hineingegeben wurde.
Das ließe sich doch auch Interface-stabil umsetzen, indem man überladene Funktionen mit Pascal-Strings anbietet und die PChar-Varianten dann einfach darauf verzweigen. Oder irre ich mich da gerade?
Gerne dochwp_xyz hat geschrieben: Mi 1. Feb 2023, 22:44 Danke für den Anschupser - ich habe mich aufgerafft, und mir das ganze näher angesehen und einen Patch daraus gemacht