Speed testing: Fastest search method

FlexibleLearning.com admin at FlexibleLearning.com
Sun Aug 31 05:53:40 EDT 2014


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






More information about the use-livecode mailing list