Arrays 为什么这种for-loop方法比map方法慢?
我在游乐场测试了我的代码,但正如讨论所指出的,游乐场是调试配置,一旦我将所有这些代码放在真正的应用程序运行中,它们就不会有太大的区别。以前不知道这个调试/发布的事情。 Swift性能相关问题,我需要遍历图像的像素偏移量,首先我尝试用这种方式Arrays 为什么这种for-loop方法比map方法慢?,arrays,swift,performance,for-loop,map-function,Arrays,Swift,Performance,For Loop,Map Function,我在游乐场测试了我的代码,但正如讨论所指出的,游乐场是调试配置,一旦我将所有这些代码放在真正的应用程序运行中,它们就不会有太大的区别。以前不知道这个调试/发布的事情。 Swift性能相关问题,我需要遍历图像的像素偏移量,首先我尝试用这种方式 func p1() -> [[Int]]{ var offsets = [[Int]]() for row in 0..<height { var rowOffset = [Int]() for c
func p1() -> [[Int]]{
var offsets = [[Int]]()
for row in 0..<height {
var rowOffset = [Int]()
for col in 0..<width {
let offset = width * row + col
rowOffset.append(offset)
}
offsets.append(rowOffset)
}
return offsets
}
func p1()->[[Int]]{
变量偏移量=[[Int]]()
对于0..中的行,map
方法之所以更快,最明显的原因是因为map
预先分配数组容量(因为它知道结果数组中将有多少个元素)。您也可以在代码中通过调用数组上的ary.reserveCapacity(n)
来实现这一点,例如
func p1() -> [[Int]]{
var offsets = [[Int]]()
offsets.reserveCapacity(height) // NEW LINE
for row in 0..<height {
var rowOffset = [Int]()
rowOffset.reserveCapacity(width) // NEW LINE
for col in 0..<width {
let offset = width * row + col
rowOffset.append(offset)
}
offsets.append(rowOffset)
}
return offsets
}
func p1()->[[Int]]{
变量偏移量=[[Int]]()
偏移量.保留容量(高度)//新行
对于0中的行。谢谢,通过使用它,它得到了改进,但只是一点点,map仍然获胜overwhelmingly@XueYu您是在调试还是在发布配置中进行测试?map
版本在这两个方面都会很快,因为stdlib是通过优化编译的,但是您的自定义版本在发布时会比在调试时快得多。我只是做了很多工作在操场上测试,使用CACurrentMediaTime()以显示使用的时间。游乐场将处于调试配置中。请尝试在您在发布模式下编译的实际应用程序中运行相同的内容。没错,这是调试与发布配置的问题。即使我将原始代码放在运行的实际应用程序中,它们也没有多大区别。我以前不知道这一点。非常感谢。
func p1() -> [[Int]]{
var offsets = [[Int]]()
offsets.reserveCapacity(height) // NEW LINE
for row in 0..<height {
var rowOffset = [Int]()
rowOffset.reserveCapacity(width) // NEW LINE
for col in 0..<width {
let offset = width * row + col
rowOffset.append(offset)
}
offsets.append(rowOffset)
}
return offsets
}