If statements vs case
Richard Gaskin
ambassador at fourthworld.com
Mon Feb 26 12:35:28 EST 2007
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
--
Richard Gaskin
Managing Editor, revJournal
_______________________________________________________
Rev tips, tutorials and more: http://www.revJournal.com
More information about the use-livecode
mailing list