swift数组removeLast非常慢

时间:2017-01-23 22:27:27

标签: arrays swift

调用removeLast非常慢(弹出77k元素需要几分钟)。 documentation表示O(1),我认为实现只会减小数组大小。显然不是:

stack trace indicating <code>removeLast</code> calling memmove

为什么要拨打remove(at: Int)

这个重复案例比我预期的要慢(我已经习惯了C ++的std::vector表现),但仍然没有我所见到的那么慢我的代码:

var array = [ Int ]()

for i in 0..<262144 {
   array.append(i)
}

print ("done appending") // we get here immediately

let n = array.count
for _ in 0..<n {
    array.removeLast() // popLast is also slow
}

print ("done")

我的机器需要16秒。等效的C ++程序需要.002秒。

1 个答案:

答案 0 :(得分:4)

问题在于您的测试方式。调试版本中的 No 速度测试在最轻微的情况下是有意义的。这就是您总是在中配置文件的原因。它使用Release版本。为获得真实的结果,请在设备上的仪器中进行配置其他一切都是幻觉。

发布版本,而不是Debug版本。您将看到实际上您立即获得print个语句

结果(在我的电脑上,不是设备,因为我懒得把手机从口袋里掏出来)显示自参考日期以来的秒数:

starting 506917910.056674
done appending 506917910.060245
done 506917910.069827