CLEAR oFoo = CREATEOBJECT('FooClass') * For reference. Message iteration speed lnstart = SECONDS() FOR lnj = 1 TO 10000 NEXT lnfinish = SECONDS() ? "Elapsed time - no calls " + TRANSFORM(lnfinish - lnstart, '#.###') * Measure straight procedure call lnstart = SECONDS() FOR lnj = 1 TO 10000 DO FooProc NEXT lnfinish = SECONDS() ? "Elapsed time - Procedure call " + TRANSFORM(lnfinish - lnstart, '#.###') * Measure procedure called as a function lnstart = SECONDS() FOR lnj = 1 TO 10000 x = FooProc() NEXT lnfinish = SECONDS() ? "Elapsed time - Procedure as function call " + TRANSFORM(lnfinish - lnstart, '#.###') * Measure function call lnstart = SECONDS() FOR lnj = 1 TO 10000 x = FooFunc() NEXT lnfinish = SECONDS() ? "Elapsed time - Function call " + TRANSFORM(lnfinish - lnstart, '#.###') * Method call lnstart = SECONDS() FOR lnj = 1 TO 10000 oFoo.FooExec() NEXT lnfinish = SECONDS() ? "Elapsed time - Method call " + TRANSFORM(lnfinish - lnstart, '#.###') * Method function call lnstart = SECONDS() FOR lnj = 1 TO 10000 x = oFoo.FooExec() NEXT lnfinish = SECONDS() ? "Elapsed time - Method function call " + TRANSFORM(lnfinish - lnstart, '#.###') FUNCTION FooFunc LPARAMETER pFoo RETURN ENDFUNC PROCEDURE FooProc LPARAMETER pFoo RETURN ENDPROC DEFINE CLASS FooClass AS CUSTOM FUNCTION FooExec LPARAMETER pFoo RETURN ENDFUNC ENDDEFINE