Welcome To The Home Of The Visual FoxPro Experts  
home. signup. forum. archives. search. google. articles. downloads. faq. members. weblogs. file info. rss.
 From: Pete Sass
  Where is Pete Sass?
 Marathon, Ontario
 Canada
 Pete Sass
 To: Mike Yearwood
  Where is Mike Yearwood?
 Toronto
 Canada
 Mike Yearwood
 Tags
Subject: RE: C++ compiler
Thread ID: 415740 Message ID: 416145 # Views: 36 # Ratings: 0
Version: Visual FoxPro 9 SP2 Category: 3rd Party Software
Date: Monday, December 22, 2014 3:57:28 PM         
   


> >
> >
> > Hi Mike,
> >
> > I raised this question as several years ago I played around with this especially
> > in large tables where on the navigation buttons I had one command button - Goto Top
> > and another command button - Goto Bottom
> >
> > I re-ran this test again only on a mega-sized dbf with 6 million records in it
> > and no index key active.
> >
> > Here is the simply code I used:
> >
* --GOTOEnd.prg
> > USE SPEED2		&& 6,000,000 record table with 6 character fields filled with data.
> > 
> > * --- Move to last record via LOCATE = .F.
> > st = SECONDS()
> > LOCATE = .F.
> > et = SECONDS()
> > lnElapse = et - st
> > = MESSAGEBOX("LOCATE = .F. time: " + ALLTRIM(STR(lnElapse,10,4)))
> > 
> > GOTO TOP
> > 
> > * --- Move to last record via GOTO BOTTOM
> > st = SECONDS()
> > GOTO BOTTOM
> > et = SECONDS()
> > lnElapse = et - st
> > = MESSAGEBOX("GOTO Bottom time: " + ALLTRIM(STR(lnElapse,10,4)))
> > 
> > * --- Flip the navigation around to ensure that the one that runs first
> > * --- or second has no bearing on the time.
> > GOTO TOP
> > 
> > * --- Move to last record via GOTO BOTTOM
> > st = SECONDS()
> > GOTO BOTTOM
> > et = SECONDS()
> > lnElapse = et - st
> > = MESSAGEBOX("GOTO Bottom time: " + ALLTRIM(STR(lnElapse,10,4)))
> > 
> > GOTO TOP
> > 
> > * --- Move to last record via LOCATE = .F.
> > st = SECONDS()
> > LOCATE = .F.
> > et = SECONDS()
> > lnElapse = et - st
> > = MESSAGEBOX("LOCATE = .F. time: " + ALLTRIM(STR(lnElapse,10,4)))
> > 
> > USE

> >
> > My timing results from the 4 elapse times above are shown below:
> >
> >
> >
> >
> >
> > If I set order to tagname so an index is active I get the same results.
> > I close out of VFP and re-ran to unsure nothing cached and got the same results.
> >
> > So I guess if the LOCATE = .F. is faster, I cannot measure the difference moving through
> > a 6 million record table index or non-indexed.
> >
> > Pete "the IceMan", from the Great White North of Canada.
> > www.marathongriffincomputers.com
>
> Gentlemen, you're forgetting a very significant part of the experiment. You must set a filter and/or you must have a large number of deleted records at the physical top and/or bottom of the table with set deleted on.
>
> In that situation - which many people have making it a real-world test - you will see that GO TOP/BOTTOM is un-optimized and therefore takes a very long time versus LOCATE. I'm not sure where LOCATE = .F. came from. That is a typo. It must be LOCATE FOR .F.
>
> The experiment was presented in my first FoxPro Advisor article back in 1995.
>
> Mike Yearwood
> Microsoft MVP Visual FoxPro 2008, 2009
> We have enough youth. We need a fountain of smart!
> There may be many ways to skin a cat, but there are very few right ways to do it.



Hi Mike,

I wondered about the locate and have for some time now.
So what this boils down to if I create a cursor/table from scratch the test does not
show up the improved speed when using locate, but in a real-world situation knowing
there will be deleted records unless a pack was just done, there is where the locate
is going to shine!

Did I get this right?

My mistake the LOCATE = .F. is a typo that I have in one of the routine in error - booo hoo!


Pete "the IceMan", from the Great White North of Canada.
www.marathongriffincomputers.com

ENTIRE THREAD

C++ compiler Posted by Mike Yearwood @ 12/11/2014 9:47:42 PM
RE: C++ compiler Posted by Tony Vignone @ 12/11/2014 10:18:16 PM
RE: C++ compiler Posted by michael johnson @ 12/12/2014 3:15:14 AM
RE: C++ compiler Posted by Mike Yearwood @ 12/12/2014 4:40:18 PM
RE: C++ compiler Posted by Chuanbing Chen @ 12/12/2014 8:01:24 AM
RE: C++ compiler Posted by Pete Sass @ 12/12/2014 12:41:53 PM
RE: C++ compiler Posted by Pete Sass @ 12/13/2014 5:29:47 PM
RE: C++ compiler Posted by Tony Vignone @ 12/13/2014 8:27:53 PM
RE: C++ compiler Posted by Chuanbing Chen @ 12/14/2014 3:44:09 AM
RE: C++ compiler Posted by Mike Yearwood @ 12/15/2014 4:02:35 PM
RE: C++ compiler Posted by Tony Vignone @ 12/16/2014 2:10:42 PM
RE: C++ compiler Posted by Mike Yearwood @ 12/16/2014 6:00:18 PM
RE: C++ compiler Posted by Tony Vignone @ 12/16/2014 7:37:14 PM
RE: C++ compiler Posted by Pete Sass @ 12/17/2014 3:27:15 AM
RE: C++ compiler Posted by Mike Yearwood @ 12/17/2014 3:50:23 PM
RE: C++ compiler Posted by Pete Sass @ 12/17/2014 6:09:24 PM
RE: C++ compiler Posted by Mike Yearwood @ 12/18/2014 3:22:37 PM
RE: C++ compiler Posted by Pete Sass @ 12/18/2014 4:55:58 PM
RE: C++ compiler Posted by Mike Yearwood @ 12/18/2014 7:16:44 PM
RE: C++ compiler Posted by Pete Sass @ 12/18/2014 7:53:51 PM
RE: C++ compiler Posted by Chuanbing Chen @ 12/19/2014 12:48:30 AM
RE: C++ compiler Posted by Pete Sass @ 12/19/2014 11:57:43 PM
RE: C++ compiler Posted by Mike Gagnon @ 12/20/2014 2:09:13 AM
RE: C++ compiler Posted by Pete Sass @ 12/20/2014 3:18:09 PM
RE: C++ compiler Posted by Vilhelm-Ion Praisach @ 12/20/2014 6:53:41 PM
RE: C++ compiler Posted by Pete Sass @ 12/20/2014 8:25:14 PM
RE: C++ compiler Posted by Vilhelm-Ion Praisach @ 12/20/2014 9:18:10 PM
RE: C++ compiler Posted by Mike Yearwood @ 12/22/2014 3:01:11 PM
RE: C++ compiler Posted by Pete Sass @ 12/22/2014 3:57:28 PM
RE: C++ compiler Posted by Vilhelm-Ion Praisach @ 12/22/2014 5:54:52 PM
RE: C++ compiler Posted by Mike Yearwood @ 12/22/2014 9:38:06 PM
RE: C++ compiler Posted by Chuanbing Chen @ 12/23/2014 1:03:49 AM
RE: C++ compiler Posted by Mike Yearwood @ 12/22/2014 3:42:43 PM