[Gambas-user] Performance figures for various ways to do reflective method calls

Brian G brian at westwoodsvcs.com
Tue Oct 17 03:02:43 CEST 2023


I find this interesting, I ran a baseline call set as well results:

Main.Main.15: Start method Local direct as baseline...integer parameter
Main.Main.20: Done in 652ms
Main.Main.22: Start method Local direct as baseline... object parameter
Main.Main.27: Done in 603ms
Main.Main.29: Start method direct class static call...
Main.Main.34: Done in 736ms
Main.Main.36: Start method direct module  method call...module
Main.Main.41: Done in 736ms
Main.Main.43: Start method direct call...
Main.Main.48: Done in 679ms
Main.Main.50: Start method direct call... object
Main.Main.55: Done in 1439ms
Main.Main.57: Start method reflective call...
Main.Main.62: Done in 5487ms
Main.Main.69: Start method eval call...
Main.Main.76: Done in 4246ms
Main.Main.78: Start blind method variant call...
Main.Main.85: Done in 1403ms

but with fast unsafe, some types are actually slower......

Main.Main.15: Start method Local direct as baseline...integer parameter
Main.Main.20: Done in 152ms
Main.Main.22: Start method Local direct as baseline... object parameter
Main.Main.27: Done in 163ms
Main.Main.29: Start method direct class static call...
Main.Main.34: Done in 964ms
Main.Main.36: Start method direct module  method call...module
Main.Main.41: Done in 937ms
Main.Main.43: Start method direct call...
Main.Main.48: Done in 945ms
Main.Main.50: Start method direct call... object
Main.Main.55: Done in 1203ms
Main.Main.57: Start method reflective call...
Main.Main.62: Done in 5413ms
Main.Main.69: Start method eval call...
Main.Main.76: Done in 4638ms
Main.Main.78: Start blind method variant call...
Main.Main.85: Done in 1412ms


"Failure is the key to success; 
 each mistake teaches us something"  .. Morihei Ueshiba
Brian G

----- On Oct 17, 2023, at 12:19 AM, Brian G brian at westwoodsvcs.com wrote:

> Hi martin,
> 
>  There is one more method to use which is defining ckey as an object
>    Dim key3 As Object = New Ckey
>    Debug "Start method direct call... object"
>    startTime = Now()
>    For i As Long = 1 To iterations
>        result = key3._equals(key2)
>    Next
>    Debug Subst("Done in &1ms", DateDiff(startTime, Now, gb.Millisecond))
> 
> the timing looks like this
> Main.Main.15: Start method direct call...
> Main.Main.20: Done in 765ms
> Main.Main.22: Start method direct call... object
> Main.Main.27: Done in 1156ms
> Main.Main.29: Start method reflective call...
> Main.Main.34: Done in 5220ms
> Main.Main.41: Start method eval call...
> Main.Main.48: Done in 4554ms
> Main.Main.50: Start blind method variant call...
> Main.Main.57: Done in 1332ms
> 
> 
> "Failure is the key to success;
> each mistake teaches us something"  .. Morihei Ueshiba
> Brian G
> 
> ----- On Oct 13, 2023, at 4:47 PM, Martin Fischer martin.fischer6 at web.de wrote:
> 
>> Hi fellow gambassians,
>> 
>> I was interested in the performance of reflective method calls in
>> gambas. I tested:
>> - direct (early bound) method call
>> - reflective via Object.Call
>> - reflective via gb.eval
>> - reflective via Variant
>> 
>> Here are the numbers:
>> 
>> Main.Main.11: Start method direct call...
>> Main.Main.16: Done in 540ms
>> Main.Main.18: Start method reflective call...
>> Main.Main.23: Done in 4135ms
>> Main.Main.30: Start method eval call...
>> Main.Main.37: Done in 3469ms
>> Main.Main.39: Start blind method variant call...
>> Main.Main.46: Done in 1185ms
>> 
>> The absolute numbers are not relevant. These figures answer the
>> question: "how much slower is reflective call compared to direct call".
>> 
>> Tiny Project is attached, if you want to reproduce.
>> 
>> Regards
>> ____________________________________
>> Martin Fischer
>> 
>> 
>> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----
> 
> ----[ http://gambaswiki.org/wiki/doc/netiquette ]----


More information about the User mailing list