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