If statements vs case
Hershel Fisch
hershf at rgllc.us
Mon Feb 26 15:11:51 EST 2007
On 2/26/07 1:50 PM, "Jim Ault" <JimAultWins at yahoo.com> wrote:
> So the bottom line is that if you are executing this IF or SWITCH you can
> expect to waste....
>
> Per trip cost is
>
> 89-74/10,000
> = 15/10,000 milliseconds
> = 0.0015 milliseconds
> which is 1.5 millionths of a second longer per loop to use IF
>
> A million here, a million there, and pretty soon your talking real seconds
I thought you are talking about accumulating real "dollars" LOL
> :-)
>
> Thanks for the testing work.
>
> Jim Ault
> Las Vegas
>
>
> On 2/26/07 9:35 AM, "Richard Gaskin" <ambassador at fourthworld.com> wrote:
>
>> Mark Smith wrote:
>>> I just ran a very simple benchmark test, which suggests that if/then
>>> goes about 20% faster than switch/case.
>>
>> I get different results here, but I had to rewrite the if-then test as
>> the example posted as it wasn't executing the same logic as the switch
>> block. In the "if" example the "c" case didn't fall through to also
>> execute the "d" case as it did in the "switch" example, and the "e" case
>> wasn't handled at all.
>>
>> So I wrote a fresh pair of examples that test all possible cases,
>> running each full set 10000 iterations. They each produce the same
>> logical result at this point, with these times on my MacBook Pro:
>>
>> if:89ms switch:74ms
>> if result:140000 switch result:140000
>>
>> The timings aren't surprising given the extra evaluations needed to get
>> the same effect using "if" as with the "switch" fall-through behavior.
>>
>> Please double-check the benchmark handler below to make sure that both
>> tests are using equivalent logic, and look for ways the "if-then" might
>> be better optimized:
>>
>>
>>
>> local sResult
>>
>> on mouseUp
>> -- number of test iterations:
>> put 10000 into n
>> -- load var with all possible values:
>> put "abcde" into s
>> --
>> --
>> -- TEST 1: if-then
>> put 0 into sResult
>> put the millisecs into t
>> repeat n
>> --
>> repeat for each char tVar in s
>> If tVar ="a" or tVar ="b" then
>> DoThing1
>> else if tVar = "c" or tVar = "d" then
>> if tVar = "c" then
>> DoThing2
>> end if
>> DoThing3
>> Else If tVar ="e" then
>> DoThing4
>> End if
>> end repeat
>> --
>> end repeat
>> put the millisecs - t into t1
>> put sResult into tResult1
>> --
>> -- TEST 2: switch
>> put 0 into sResult
>> put the millisecs into t
>> repeat n
>> --
>> repeat for each char tVar in s
>> switch tVar
>> case "a"
>> case "b"
>> DoThing1
>> break
>> case "c"
>> DoThing2
>> case "d"
>> DoThing3
>> break
>> case "e"
>> DoThing4
>> end switch
>> end repeat
>> --
>> end repeat
>> put the millisecs - t into t2
>> put sResult into tResult2
>> --
>> -- show results:
>> put "if:"&t1 &"ms"&&"switch:"& t2&"ms"&cr&\
>> "if result:"& tResult1 &&"switch result:"&tResult2
>> end mouseUp
>>
>>
>>
>> on DoThing1
>> add 1 to sResult
>> end DoThing1
>>
>> on DoThing2
>> add 2 to sResult
>> end DoThing2
>>
>> on Dothing3
>> add 3 to sResult
>> end Dothing3
>>
>> on DoThing4
>> add 4 to sResult
>> end DoThing4
>>
>>
>>
>
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
More information about the use-livecode
mailing list