>clear >RELEASE all >_SCREEN.FontName="Courier new" >SET DEVICE TO SCREEN >nCycle = 10000 >x=CREATEOBJECT('empty') >* internal array is filled with interleaved array,scalar properties >FOR k=0 TO 9999 > =ADDPROPERTY(m.x,"array"+PADL(LTRIM(STR(m.k,5)),5,"0")+"[1]") > =ADDPROPERTY(m.x,"scalar"+PADL(LTRIM(STR(m.k,5)),5,"0")) >NEXT > >@ $ ,0 say "Item | Scalar Read | Scalar Write | Array Read | Array Write " >@ $+1,0 say "-------|---------------|--------------|--------------|---------------" >@ $+1,0 say "First " >T1=SECONDS() >FOR jui=1 TO m.nCycle > =x.scalar00000 >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) >T1=SECONDS() >FOR jui=1 TO m.nCycle > x.scalar00000 = .T. >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) STYLE "B" >T1=SECONDS() >FOR jui=1 TO m.nCycle > =x.array00000 >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) >T1=SECONDS() >FOR jui=1 TO m.nCycle > x.array00000 = .T. >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) > >@ $+1,0 say "Middle " >T1=SECONDS() >FOR jui=1 TO m.nCycle > =x.scalar04999 >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) >T1=SECONDS() >FOR jui=1 TO m.nCycle > x.scalar04999 = .T. >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) STYLE "B" >T1=SECONDS() >FOR jui=1 TO m.nCycle > =x.array04999 >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) >T1=SECONDS() >FOR jui=1 TO m.nCycle > x.array04999 = .T. >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) > >@ $+1,0 say "Last " >T1=SECONDS() >FOR jui=1 TO m.nCycle > =x.scalar09999 >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) >T1=SECONDS() >FOR jui=1 TO m.nCycle > x.scalar09999 = .T. >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) STYLE "B" >T1=SECONDS() >FOR jui=1 TO m.nCycle > =x.array09999 >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) >T1=SECONDS() >FOR jui=1 TO m.nCycle > x.array09999 = .T. >NEXT >@ $,$ say STR(SECONDS()-T1,15,3) > >* Result on my machine >*Item | Scalar Read | Scalar Write | Array Read | Array Write >*-------|---------------|--------------|--------------|--------------- >*First 0,010 0,010 0,010 0,010 >*Middle 0,370 0,701 0,361 0,360 >*Last 0,741 1,452 0,761 0,761 >>