On Tue, 28 Dec 2021, Don Duvall via fpc-pascal wrote:

Has any performance tests been ran, to see what the runtime impact of utilizing RTTI is? Hopefully negligent in the grand scheme...

No tests have been run. I also don't know what exactly you would compare it with ?

Using some plain common sense:
The 'older' json-rpc mechanism relied on TJSONRPCHandler components on a 
Datamodule.
Loading a datamodule and all components (one per exposed method) on it also
uses RTTI, but is bound to beslower due to all the loading & parsing of the lfm file for every call.

Even so, all that will be dwarfed by the network latency & http+json  protocol:

Many years ago, I did a speed comparison test of the various protocols
offered by Remobjects SDK in delphi. It was published in Toolbox magazine:

https://www.freepascal.org/~michael/articles/index.html#remobjects2 (the date on the article is misleading, it is actually older, must have been
2005 or so)

They showed clearly that the used protocol (http & xml) is the largest factor.
in 2013 I did many tests in a JSON REST framework: the times for streaming were dwarfed by the time spent on network & database access.

Translated to RPC: if you want speed, don't use HTTP or JSON. WST offers a
binary protocol and plain TCP channel, it's bound to be much faster.

Michael.


Thanks,
Don

On 12/28/2021 2:11 PM, Michael Van Canneyt via fpc-pascal wrote:


On Tue, 28 Dec 2021, Graeme Geldenhuys via fpc-pascal wrote:

On 2021-12-28 15:25, Michael Van Canneyt via fpc-pascal wrote:

Thanks to the magic of RTTI and Invoke(), creating a JSON-RPC server has
just become significantly easier !

That's pretty neat - nicely done Michael.

We do our best.

// Create a class that implements the interface
Type
   TIntf2Impl = class(TInterfacedObject, IMyOtherInterface)
   public
     function Echo(args: TStringArray): String;
     function SayHello: string;
   end;

...snip...

// Register the class using an interface factory:
Function GetMyOtherInterface(Const aName : string) : IInterface;
begin
   Result:=TIntf2Impl.Create as IInterface;
end;


Slightly off topic, and my Object Pascal is getting a bit rusty as the years go by. <grin> ;-) In your factory above, is the "as IInterface" part needed. Can't the FPC compiler automatically cast the return type based on the function return type, and the fact that the compiler should know that TIntf2Impl type implements TInterfacedObject?

No, theoretically it probably could, but type inference is not implemented in Pascal.

Michael.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to