arrays - swift array removeLast 极慢

标签 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++ 程序需要 0.002 秒。

最佳答案

问题在于您的测试方式。 没有调试版本中的速度测试丝毫没有意义。这就是为什么您应该始终Instruments 中配置文件。它使用发布版本。要获得逼真的结果,请在设备上的 Instruments 中进行配置。其他一切都是幻觉。

发布版本也是如此,而不是调试版本。您会发现实际上您立即获得了两个print 语句。

结果(在我的电脑上,而不是设备上,因为我懒得 Handlebars 机从口袋里拿出来)显示自引用日期以来的秒数:

starting 506917910.056674
done appending 506917910.060245
done 506917910.069827

关于arrays - swift array removeLast 极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41816801/

相关文章:

javascript - Array.prototype.concat 的行为不像预期的那样

swift - 使用 Alamofire 将图像上传到 API 服务器

javascript - 检查对象数组中的所有值是否都等于 false 并在 React 中返回 true

Java查找数组索引中的最后一个成员

javascript - 两个数组之间除一个属性外的对象的交集

c++ - 如何找到多维数组的模式?

ios - 动画不执行

ios - 如何将 3 个 View Controller 嵌入到 1 个 View Controller 中?

swift - 如何以编程方式将 UILabel 和 UIImageView 添加到 CollectionView 中?

ios - 从 Objective-C NSArray 转换为 swift [[String :String]]?