Il codice seguente restituisce slow1 = 1323 ms
, slow2 = 1311 ms
e fast = 897 ms
. Come è possibile?"nidificato se" rispetto a "se" e prestazioni utilizzando F #
Qui: Nested or not nested if-blocks? accennano che
qualsiasi compilatore moderno, e con questo intendo qualsiasi cosa costruita negli ultimi 20 anni, compilerà questi per lo stesso codice.
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
hai provato in modalità di rilascio? –
Sì. Anche qualsiasi CPU, X86 e X64. In modalità debug entrambe le versioni diventano ugualmente lente (3083 ms). –
Devo dire che il risultato ugualmente lento rende molto più "senso" dei diversi ... –