Properties set/get huge speed difference?

Unknown W. Brackets unknown at simplemachines.org
Fri Sep 15 21:08:52 PDT 2006


Try defining the getter and setter as final.

It's a function call, and it's using a virtual table as far as I know. 
That's going to be a lot slower.

-[Unknown]


> Hello,
> 
> anyone knows why getting/setting the class properties by invoking the 
> methods is so slow (~20 times slower - gdc/ubuntu/amd32) comparing with 
> doing the same things directly, with the "=" operator (public 
> properties)? this matters in an app with thousands of evaluations per 
> loop, also the methods are needed to compose different behaviors, etc.
> i give here a little "get" example:
> 
> //=======================
> // src/clasamare.d
> 
> module src.clasamare;
> 
> class ClasaMare
> {
>     //private:
>     float val;
>     
>     //public:
>     void value(float newValue)
>     {
>         val=newValue;
>     }
>     float value()
>     {
>         return val;
>     }
> }
> //=========================
> 
> this runs slower(~0.450s):
> 
> //=========================
> // src/test.d
> 
> import src.clasamare;
> import std.cstream;
> 
> int main()
> {
>     ClasaMare cls1=new ClasaMare();
>     for(uint i=0; i<100000000; i++)
>     {
>         cls1.value=15.7;
>     }
>     dout.writefln("%f", cls1.value);
>     return 0;
> }
> //==========================
> 
> this is faster(~0.020s):
> 
> //=========================
> // src/test.d
> 
> import src.clasamare;
> import std.cstream;
> 
> int main()
> {
>     ClasaMare cls1=new ClasaMare();
>     for(uint i=0; i<100000000; i++)
>     {
>         cls1.val=15.7;
>     }
>     dout.writefln("%f", cls1.value);
>     return 0;
> }
> //==========================
> 
> i compiled with this command:
> 
> gdc -frelease -s -O3 -fomit-frame-pointer -mmmx -msse -mfpmath=sse 
> -mfancy-math-387 -minline-all-stringops -fschedule-insns2 
> -frerun-loop-opt -frerun-cse-after-loop -funroll-loops 
> -fexpensive-optimizations -finline-functions -o made test.d 
> src/clasamica.d src/clasamare.d
> 
> when i compile with:
> gdmd -O -release -inline test.d src/clasamica.d src/clasamare.d
> the times are 0.450s/0.150s
> 
> thank you



More information about the Digitalmars-d-learn mailing list