surprising filter benchmarks

Eric Chatonet eric.chatonet at sosmartsoftware.com
Tue Jul 12 16:46:26 EDT 2005


Hi Richard,

I think the speed depends on the filter complexity.
For instance:

on mouseUp
   repeat 100000
     if random (2) = 1 then put "zaz" & cr after tList
     else put "zbz" & cr after tList
   end repeat
   -----
   put the milliseconds into tStart1
   filter tList with "*a*"
   put the milliseconds - tStart1 into tResult1
   -----
   put the milliseconds into tStart2
   repeat for each line tLine in tList
     if "a" is in tList then put tLine & cr after tNewList
   end repeat
   delete char -1 of tNewList
   put the milliseconds - tStart2 into tResult2
   -----
   put "Filter: " && tResult1 & cr &"Repeat:" &&  tResult2
end mouseUp

Results -
    Filter: 41
    Repeat: 117

So may be we have to choose the right method according to the context.
Two cents that do not make life easier :-)

Le 12 juil. 05 à 22:26, Richard Gaskin a écrit :

> I figured the filter command would carry at least some overhead for  
> its convenience, but I had no idea how much!
>
> I wrote the test below to compare it with walking through a list  
> line by line, and the results were surprising:
>
> on mouseUp
>   put  fwdbCurTableData() into s -- gets 10,800 lines of
>   --                                tab-delimited data
>   --
>   -- Method 1: filter command
>   --
>   put format("*a*\t*r*\tr\t*\t*\t*\t*\t*") into tFilter
>   put s into result1
>   put the millisecs into t
>   filter result1 with tFilter
>   put the millisecs - t into t1
>   --
>   --
>   -- Method 2: repeat for each
>   --
>   set the itemdel to tab
>   put the millisecs into t
>   repeat for each line tLine in s
>     if item 1 of tLine contains "a" \
>         AND item 2 of tLine contains "r"\
>         AND item 3 of tLine is "r" then
>       put tLine&cr  after result2
>     end if
>   end repeat
>   delete last char of result2
>   put the millisecs - t into t2
>   --
>   put result1 into fld "result"
>   put result2 into fld "result2"
>   --
>   put "Filter: "&t1 &cr& "Repeat: "&t2
> end mouseUp
>
>
>
> Results -
>    Filter: 745
>    Repeat: 40
>
> Did I miss something, or am I just seeing the penalty for the  
> filter command's generalization?

Best Regards from Paris,

Eric Chatonet.
----------------------------------------------------------------
So Smart Software

For institutions, companies and associations
Built-to-order applications: management, multimedia, internet, etc.
Windows, Mac OS and Linux... With the French touch

Free plugins and tutorials on my website
----------------------------------------------------------------
Web site        http://www.sosmartsoftware.com/
Email        eric.chatonet at sosmartsoftware.com/
Phone        33 (0)1 43 31 77 62
Mobile        33 (0)6 20 74 50 86
----------------------------------------------------------------




More information about the use-livecode mailing list