PRIVATE m.lcCurrentBuffer >STORE " " TO m.lcCurrentBuffer>
STORE " " TO m.lcCurrentBuffercompare
LOCAL m.lcCurrentBuffer vs PRIVATE lcCurrentBufferPRIVATE wins
m.lcCurrentBuffer = SPACE(8) vs STORE " " TO lcCurrentBufferSTORE wins
FOR k=1 to 10000000 NEXT CLEAR SET DECIMALS TO 0 loStopWatch = CREATEOBJECT("cusStopWatch") PRIVATE i,jj c0=0 FOR jj=1 to 5 lcStartBuffer = loStopWatch.Start() FOR i = 0 TO 5000000 ENDFOR STORE loStopWatch.Stop(m.lcStartBuffer)+m.c0 TO c0 NEXT c0=m.c0/5 FOR jj=1 to 5 ? "PRIVATE/LOCAL " lcStartBuffer = loStopWatch.Start() FOR i = 0 TO 5000000 PRIVATE pippo RELEASE pippo ENDFOR STORE loStopWatch.Stop(m.lcStartBuffer) TO c1 lcStartBuffer = loStopWatch.Start() FOR i = 0 TO 5000000 LOCAL m.pippo RELEASE m.pippo ENDFOR STORE loStopWatch.Stop(m.lcStartBuffer) TO c2 ?? (m.c2-m.c0)/(m.c1-m.c0) next FOR jj=1 to 5 ? "(STORE)/(M.+ = )" lcStartBuffer = loStopWatch.Start() PRIVATE pippo FOR i = 0 TO 5000000 STORE " " TO pippo ENDFOR RELEASE pippo STORE loStopWatch.Stop(m.lcStartBuffer) TO c1 lcStartBuffer = loStopWatch.Start() LOCAL m.pippo FOR i = 0 TO 5000000 m.pippo = SPACE(8) ENDFOR RELEASE pippo STORE loStopWatch.Stop(m.lcStartBuffer) TO c2 ?? (m.c2-m.c0)/(m.c1-m.c0) next ********************************************************** ********************************************************** DEFINE CLASS cusStopWatch AS Timer PROTECTED inTicksPerSecond PROTECTED wrapTime wrapTime = 0 HIDDEN PROCEDURE Init PRIVATE randomName STORE SYS(2015) to randomName DECLARE INTEGER QueryPerformanceFrequency IN kernel32 AS (m.randomName) STRING @lpFrequency LOCAL lcCurrentBuffer STORE " " TO lcCurrentBuffer ? m.randomName+"(@m.lcCurrentBuffer)" =EVALUATE(m.randomName+"(@m.lcCurrentBuffer)") CLEAR DLLS &randomName THIS.inTicksPerSecond = CTOBIN(LEFT(m.lcCurrentBuffer, 4),"RS") + CTOBIN(RIGHT(m.lcCurrentBuffer, 4),"RS") * 2^32 LOCAL ARRAY laDLLS[1,2] ADLLS(laDlls) IF EMPTY(ASCAN(laDLLs,"QueryPerformanceCounter",1,-1,2,15)) DECLARE INTEGER QueryPerformanceCounter IN kernel32 STRING @lpPerformanceCount ENDIF PRIVATE wrapTime STORE 0 TO wrapTime FOR k=0 to 1000 STORE m.wrapTime + this.Stop(this.Start()) TO wrapTime NEXT this.wrapTime = m.wrapTime/m.k ENDPROC PROCEDURE Start PRIVATE lcStartBuffer STORE " " TO lcStartBuffer =QueryPerformanceCounter(@m.lcStartBuffer) *The state of the start buffer must be *preserved so pass it back. This permits *multiple callers to use this same *cusStopWatch instance, simultaneously. RETURN m.lcStartBuffer ENDPROC PROCEDURE Stop(tcStartBuffer) PRIVATE lcCurrentBuffer STORE " " TO lcCurrentBuffer =QueryPerformanceCounter(@m.lcCurrentBuffer) RETURN ( CTOBIN(LEFT(m.lcCurrentBuffer, 4),"RS") - CTOBIN(LEFT(m.tcStartBuffer, 4),"RS") ; + 2^32 * (CTOBIN(RIGHT(m.lcCurrentBuffer, 4),"RS") - CTOBIN(RIGHT(m.tcStartBuffer, 4),"RS"))) ; / m.THIS.inTicksPerSecond - m.this.wrapTime ENDPROC ENDDEFINE