Poniższy kod jest wynikiem slow1 = 1323 ms
, slow2 = 1311 ms
i fast = 897 ms
. Jak to możliwe?"zagnieżdżony, jeśli" w porównaniu z wydajnością "jeśli i" przy użyciu F #
tutaj: Nested or not nested if-blocks? wspomnieć, że
Każdy nowoczesny kompilator i przez to mam na myśli niczego zbudowany w ciągu ostatnich 20 lat, będzie kompilować je do tego samego kodu.
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
czy wypróbowałeś go w trybie zwolnienia? –
Tak. Również dowolny procesor, X86 i X64. W trybie debugowania obie wersje stają się równie wolne (3083 ms). –
Muszę powiedzieć, że równie powolny wynik ma o wiele bardziej "sens" niż te różne ... –