On Fri, 30 Aug 2019, Anthony Walter via lazarus wrote:

Alan, oh that's a good idea. I will do that as well as add a few more
parser libraries as requested by a few people in other non mailing lists
threads. I will also try to find out what's going on the unicode strings as
it might be a problem with the compiler.

Michael,

I am on Linux as well, but I will test under Windows and Mac too.

To show that my argument of 'coding proficiency' influence on algorithm speed is not complete nonsense, I quickly cooked up the following test:

{$mode objfpc}
{$h+}

uses DateUtils, Sysutils,Classes, fpjson, jsonparser;

var
  FN : String;
  i,aCount : Integer;
  S : TJSONStringType;
  T : TMemoryStream;
  N : TDateTime;

procedure ReadJSON;

begin
  T:=TMemoryStream.Create;
  T.LoadFromFile(FN);
  SetLength(S,T.Size);
  T.ReadBuffer(S[1],T.Size);
  T.Position:=0;
end;

begin
  if ParamCount<>2 then Halt(1);
  aCount:=StrToInt(Paramstr(1));
  FN:=ParamStr(2);
  ReadJSON;
  try
    Writeln('Reading string ',aCount,' times');
    N:=Now;
    for I:=1 to aCount do
      GetJSON(S).Free;
    Writeln('Msecs : ',MillisecondsBetween(Now,N));
    Writeln('Reading stream ',aCount,' times');
    N:=Now;
    for I:=1 to aCount do
      begin
      GetJSON(T).Free;
      T.Position:=0;
      end;
    Writeln('Msecs : ',MillisecondsBetween(Now,N));
  finally
    T.Free;
  end;
end.

When you run this:

home:~/fpc/packages/fcl-json/tests> ./testjsonspeedread 100 ./testdata.json
Reading string 100 times
Msecs : 2972
Reading stream 100 times
Msecs : 1203

(file of 260Kb, 500 lines)

Not using a string (as you do) but a stream already gives a factor of 2.x 
faster.
The speed gain is there both for trunk as for 3.0.4.

So, I'm fairly confident that I can probably speed up your test results as
well, when you send me the sources.

That said, this is not to say that there is no room for speed improvements in 
fpjson.

I've already identified 2 places where speed gains can be made in the fpJSON
codebase, I'll improve the codebase this weekend and post results.


Michael.
--
_______________________________________________
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to