Speed testing: Fastest search method

Peter Haworth pete at lcsql.com
Sun Aug 31 11:00:11 EDT 2014


Thanks Hugh.  I guess  I'll be careful about where I use method 1 in
future!

I would expect method 1 to take longer but that's a huge difference. I
wonder if this would speed it up:

Put the number of lines in tVar into tCount
Repeat with x=tCount down to 1

Pete
lcSQL Software
On Aug 31, 2014 2:53 AM, "FlexibleLearning.com" <admin at flexiblelearning.com>
wrote:

> Some benchtesting...
>
> Setup:
>     LC7DP10, Windows 7
>
> Source data:
>     10,000 lines of random data
>     100 chars per line
>     3,346 empty lines
>
> Task:
>     Strip lines where a given condition is met.
>
> Results:
>     Method 1
>     Operating on a single variable, 'repeat with' + delete line
>     25.586 secs
>
> Method 2
>     Operating on a single variable, 'repeat for each' + filter with empty
>     7.755 secs
>
> Method 3
>     Using a second variable for output, 'repeat for each' + second variable
>     0.136 secs
>
> Conclusions:
>     If memory is an issue, then Method 2 is best
>     If memory is not an issue, then Method 3 is best
>
> Scripts applied:
> #1:
> on mouseUp
>    set the cursor to watch
>    put the long seconds into tStart
>    put fld "Data" into tVar
>    repeat with x=the number of lines in tVar down to 1
>       if line x of tVar="" then
>          delete line x of tVar
>       end if
>    end repeat
>    put tVar into fld "output"
>    put the long seconds - tStart into fld "timer1"
> end mouseUp
>
> #2:
> on mouseUp
>    set the cursor to watch
>    put the long seconds into tStart
>    put fld "data" into tVar
>    repeat for each line L in tVar
>       add 1 to x
>       if L="" then
>          put "" into line x of tVar
>       end if
>    end repeat
>    put tVar into fld "output"
>    put the long seconds - tStart into fld "timer2"
> end mouseUp
>
> #3:
> on mouseUp
>    set the cursor to watch
>    put fld "Data" into tVar
>    put the long seconds into tStart
>    repeat for each line L in tVar
>       if L<>"" then
>          put L &cr after stdout
>       end if
>    end repeat
>    if last char of stdout=cr then delete last char of stdout
>    put stdout into fld "output"
>    put the long seconds - tStart into fld "timer3"
> end mouseUp
>
>
> > On 30/08/2014 08:45, FlexibleLearning.com wrote:
> > > Peter Haworth <pete at lcsql.com> wrote
> > >
> > >> There's another situation where I use repeat with even though it's a
> little
> > >> slower than repeat for and I also alter the contents of the data I'm
> > >> repeating through without any problems.
> > >>
> > >> repeat with x=the number of lines in tVar down to to 1
> > >>     if <data condition on  line x of tVar> then
> > >>        delete line x of tVar
> > >>     end if
> > >> end repeat
>
>
> > > This is an insightful observation. Nice one, Pete!
> > >
> > > My stock method (and presumably the method you allude to above) is...
> > >
> > > repeat for each line L in tVar
> > >      add 1 to x
> > >      if <data condition on  L> then put "" into line x of tVar
> > > end repeat
> > > filter tVar without empty
> > >
> > > Both methods operate on a single data set and avoid putting the output
> > > into a second variable which, for large datasets, involve an
> unnecessary
> > > memory overhead..
> > >
> > > Hugh Senior
> > > FLCo
>
>
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>



More information about the use-livecode mailing list