调用removeLast
非常慢(弹出77k元素需要几分钟)。 documentation表示O(1),我认为实现只会减小数组大小。显然不是:
为什么要拨打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秒。
答案 0 :(得分:4)
问题在于您的测试方式。调试版本中的 No 速度测试在最轻微的情况下是有意义的。这就是您总是在中配置文件的原因。它使用Release版本。为获得真实的结果,请在设备上的仪器中进行配置其他一切都是幻觉。
发布版本,而不是Debug版本。您将看到实际上您立即获得print
个语句 。
结果(在我的电脑上,不是设备,因为我懒得把手机从口袋里掏出来)显示自参考日期以来的秒数:
starting 506917910.056674
done appending 506917910.060245
done 506917910.069827