我一直在与 Swift 的速度问题作斗争,主要是数组。目前正在运行最新的“beta 4”版本。我已将代码分解到 Playground 中以尝试显示问题
我设置了一个二维数组,对其进行迭代,设置每个元素。
import UIKit
func getCurrentMillitime() -> NSTimeInterval {
let date: NSDate = NSDate()
return date.timeIntervalSince1970*1000;
}
let startTime = getCurrentMillitime()
let X = 40
let Y = 50
var distanceGrid = [[CGFloat]](count: X, repeatedValue:[CGFloat](count: Y,repeatedValue:CGFloat(0.0)))
for xi in 0..<X {
for yi in 0..<Y {
distanceGrid[xi][yi] = 1.1
//println("x:\(xi) y:\(yi) d:\(distanceGrid[xi][yi])")
}
}
let endTime = getCurrentMillitime()
let computationTime = endTime - startTime
println("Time to compute \(computationTime) ms")
运行上面的代码,你会得到:
Time to compute 2370.203125 ms
这肯定是不对的!...我是个傻瓜吗?
最佳答案
关于 Swift 性能需要考虑的两件事:
测试期间,一切都悬而未决。
Swift 的许多性能技巧都依赖于优化器。特别是当涉及泛型时(每个数组都是泛型
Array<T>
),Swift 在-O0
处使用更具表现力/调试器友好的实现,但在-O
或-Ofast
处将其优化为更高性能的实现。 (请注意,-Ofast
还取消了边界检查和其他安全功能,因此对于生产版本来说这不是一个好主意。)
另外,请注意您当前的示例正在测量使用 init(count:repeatedValue:
创建 2D 数组的时间以及迭代它的时间。如果您只想测量后者,则应在创建数组后设置 startTime
。
关于arrays - swift 中的二维数组迭代速度(Beta 4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24958255/