【发布时间】:2013-04-16 12:33:50
【问题描述】:
以下代码生成slow1 = 1323 ms、slow2 = 1311 ms 和fast = 897 ms。这怎么可能?
这里: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 毫秒)。
-
我必须说,同样缓慢的结果比不同的结果更“有意义”......
-
您能否将 MSIL 添加到问题中?
-
这可能是短路算子的原因,请为
if i < 1000 & i < 1000 then添加计时
标签: c# performance if-statement f# cil