Implementation of LazStringUtils.ConvertLineEndings can be removed (optimization)
Original Reporter info from Mantis: SergeAnvarov @SergeAnvarov
-
Reporter name: Serge Anvarov
Original Reporter info from Mantis: SergeAnvarov @SergeAnvarov
- Reporter name: Serge Anvarov
Description:
ConvertLineEndings does the same thing as LineBreaksToSystemLineBreaks, so implementation can removed
Patch added
Additional information:
This test shows that the new implementation works even faster
[code]
{$APPTYPE CONSOLE}
{MODE OBJFPC}{
H+}
uses SysUtils, LazStringUtils;
const
CRepeatCount = 500000;
type
TMeasureFunction = function(const S: string): string;
procedure Measure(const Desc, TestLine: string; Func: TMeasureFunction);
var
S: string;
i: Integer;
Start, Elapsed: QWord;
begin
Start := GetTickCount64;
for i := 1 to CRepeatCount do
S := Func(TestLine);
Elapsed := GetTickCount64 - Start;
Writeln(Desc, ' elapsed - ', Elapsed);
end;
function ConvertLineEndingsNew(const S: string): string;
begin
Result := LineBreaksToSystemLineBreaks(S);
end;
const
CTestLine1 = 'Line'#13'Line'#13;
CTestLine2 = 'Line' + LineEnding + 'Line' + LineEnding;
begin
Measure('Old CTestLine1', CTestLine1, @ConvertLineEndings);
Measure('New CTestLine1', CTestLine1, @ConvertLineEndingsNew);
Measure('New CTestLine2', CTestLine2, @ConvertLineEndingsNew);
Measure('Old CTestLine2', CTestLine2, @ConvertLineEndings);
Readln;
end.
[/code]
On my computer (Win x64):
[Result]
Old CTestLine1 elapsed - 266
New CTestLine1 elapsed - 46
New CTestLine2 elapsed - 32
Old CTestLine2 elapsed - 109
[/Result]