Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Slow LOCATE command in _Assign method
Message
 
 
À
12/05/2010 13:23:44
Mike Yearwood
Toronto, Ontario, Canada
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Versions des environnements
Visual FoxPro:
VFP 9 SP1
OS:
Windows 7
Database:
Visual FoxPro
Divers
Thread ID:
01463679
Message ID:
01464393
Vues:
41
That's not what I see in my tests
1. No difference between WITH and direct property access
2. No difference between the first and subsequent runs
NO PROPERTY           0.295
OBJECT.PROPERTY           0.249
WITH .PROPERTY           0.250
MEMVAR           0.002

NO PROPERTY           0.296
OBJECT.PROPERTY           0.249
WITH .PROPERTY           0.252
MEMVAR           0.002

NO PROPERTY           0.294
OBJECT.PROPERTY           0.250
WITH .PROPERTY           0.251
MEMVAR           0.001
*CLEAR

*ERASE ("temp.txt")

SET ALTERNATE TO temp.txt ADDITIVE
SET ALTERNATE ON

CREATE CURSOR Test (Surname C(20))

lotest = CREATEOBJECT("empty")
addproperty(LOTEST,"membername","MCINTYRE")

?

A=SECONDS()
FOR X = 1 TO 100000
	LOCATE
	LOCATE FOR UPPER(SURNAME)= "MCINTYRE"
ENDFOR X
?"NO PROPERTY",SECONDS()-M.A

A=SECONDS()
FOR X = 1 TO 100000
	LOCATE
	LOCATE FOR UPPER(SURNAME)= LOTEST.MEMBERNAME
ENDFOR X
?"OBJECT.PROPERTY",SECONDS()-M.A

A=SECONDS()
WITH LOTEST
	FOR X = 1 TO 100000
		LOCATE
		LOCATE FOR UPPER(SURNAME)= .MEMBERNAME
	ENDFOR X
ENDWITH
?"WITH .PROPERTY",SECONDS()-M.A

A=SECONDS()
M.VAR = LOTEST.MEMBERNAME
FOR X = 1 TO 1000
	LOCATE
	LOCATE FOR UPPER(SURNAME)= M.VAR
ENDFOR X
?"MEMVAR",SECONDS()-M.A

SET ALTERNATE TO 
SET ALTERNATE OFF
>>Perhaps I should clarify what I meant by "implicit loop" -- the question was if the condition specified in the FOR clause would be evaluated multiple times (as if in a loop). In the worst case where the search can't be optimized, wouldn't it be equivalent to iterating sequentially through the list? If this is indeed the case then this might explain the apparent difference in speed between using memory variable and property of an object.
>>
>>>LOCATE has nothing to do with loops. It simply finds the first matching record.
>>>
>>>>Is there an implict loop with LOCATE?
>
>His search was optimized. Normally there is a slight difference between a Of course there has to be looping code - inside VFP - to iterate through the filtered records. There is also 'looping' code to iterate the class hierarchy for the object.property. This secondary loop is supposed to be short-circuited by WITH and it is also short-circuited by first assigning the property to a memory variable.
>
>The differences are small, but suggest the internal operations. This code:
>lotest = CREATEOBJECT("empty")
>addproperty(LOTEST,"membername","MCINTYRE")
>
>FOR x = 1 TO 100000
>ENDFOR x
>
>A=SECONDS()
>FOR X = 1 TO 1000
>	LOCATE
>	LOCATE FOR UPPER(SURNAME)= "MCINTYRE"
>ENDFOR X
>?"NO PROPERTY",SECONDS()-M.A
>
>A=SECONDS()
>FOR X = 1 TO 1000
>	LOCATE
>	LOCATE FOR UPPER(SURNAME)= LOTEST.MEMBERNAME
>ENDFOR X
>?"OBJECT.PROPERTY",SECONDS()-M.A
>
>A=SECONDS()
>WITH LOTEST
>	FOR X = 1 TO 1000
>		LOCATE
>		LOCATE FOR UPPER(SURNAME)= .MEMBERNAME
>	ENDFOR X
>ENDWITH
>?"WITH .PROPERTY",SECONDS()-M.A
>
>A=SECONDS()
>M.VAR = LOTEST.MEMBERNAME
>FOR X = 1 TO 1000
>	LOCATE
>	LOCATE FOR UPPER(SURNAME)= M.VAR
>ENDFOR X
>?"MEMVAR",SECONDS()-M.A
>
>Gives the following output
>
>NO PROPERTY 0.162
>OBJECT.PROPERTY 0.115
>WITH .PROPERTY 0.691
>MEMVAR 0.051
>
>Second run:
>NO PROPERTY 0.088
>OBJECT.PROPERTY 0.055
>WITH .PROPERTY 0.720
>MEMVAR 0.050
>
>Notice that the object approaches are not even close to each other in either run. I'm surprised that the WITH is so much slower. I'm happy the memvar beats the literal, how often do we get to search for a literal?
--sb--
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform