for循环:为什么在Swift中使用i++比i = i + 1慢?

6
这是一个普通的空循环,使用了常规的递增操作符“i++”。
import Foundation

let start = CFAbsoluteTimeGetCurrent()

for var i = 0; i < 1000000; i++ {

}

let timeTaken = CFAbsoluteTimeGetCurrent() - start

println(timeTaken) // 0.0229730010032654

但是使用“i = i + 1”循环会更快。
import Foundation

let start = CFAbsoluteTimeGetCurrent()

for var i = 0; i < 1000000; i = i + 1 {

}

let timeTaken = CFAbsoluteTimeGetCurrent() - start
println(timeTaken) // 0.00384700298309326

第二个循环快了5倍到6倍

我知道Swift仍处于测试版阶段,我不会将其与其他语言进行比较,但这对我来说没有意义。


4
前置自增呢?它也很慢吗? - Frédéric Hamidi
1
听起来很有趣,但在点赞之前我想等待其他人复制这些结果。 - JJJ
2
像这样测量时间相当荒谬。您的计算机上有许多事情同时进行。您是否打开了优化?您是否进行了多次测量? - gnasher729
4
@Ramon,为什么会呢?这个问题不是关于改进可工作代码的。 - Frédéric Hamidi
2
“i = i + 1” 不是等同于 “++i” 而不是 “i++” 吗?建议使用 “++i”。 - kaspermoerch
显示剩余4条评论
1个回答

1
这不是优化器问题吗?一个公正的测试应该是:
var i = 0
for j in 1..1000000 {
i++
}

var i = 0
for j in 1..1000000 {
i = i + 1
}

我只是想提示一下for循环中缺失的优化,如果您在循环的初始化、条件、增量/减量部分之外使用i++i = i + 1,那么没有任何区别。 - Christian Dietrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接