以下代碼導致slow1 = 1323 ms
,slow2 = 1311 ms
和fast = 897 ms
。這怎麼可能?「嵌套if」與「if and」性能使用F#
這裏:Nested or not nested if-blocks?他們提到
任何現代編譯器,和我的意思是建立在過去20年中任何東西,將編譯這些相同的代碼。
let s = System.Diagnostics.Stopwatch()
let mutable a = 1
s.Start()
for i in 0 .. 1000000000 do
if i < 0 then
if i < 0 then
a <- 4
printfn "fast = %d" s.ElapsedMilliseconds
s.Restart()
for i in 0 .. 1000000000 do
if i < 0 && i < 0 then
a <- 4
printfn "slow1 = %d" s.ElapsedMilliseconds
s.Restart()
for i in 0 .. 1000000000 do
if i < 0 & i < 0 then
a <- 4
printfn "slow2 = %d" s.ElapsedMilliseconds
您是否在發佈模式下嘗試過? –
是的。此外任何CPU,X86和X64。在調試模式下,兩個版本都變得相當慢(3083毫秒)。 –
我必須說,同樣緩慢的結果使得更多的「意義」,然後不同的... –