Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
How To Do This With A JOIN?
Message
De
03/01/2006 17:43:47
 
 
À
03/01/2006 17:05:37
Mike Yearwood
Toronto, Ontario, Canada
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Divers
Thread ID:
01081733
Message ID:
01082928
Vues:
11
>I mean is this...
>
>
PRIVATE m.lcCurrentBuffer
>STORE "          " TO m.lcCurrentBuffer
>

- m. is a slow down here because vfp go into the m. object directly


>Better than just this?
>
>
STORE "        " TO m.lcCurrentBuffer
compare
LOCAL m.lcCurrentBuffer

vs

PRIVATE lcCurrentBuffer
PRIVATE wins
m.lcCurrentBuffer = SPACE(8)

vs

STORE "          " TO lcCurrentBuffer
STORE wins

Apply the stopWatch (it is need a long test to remove the OS's noise )
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
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform