gpt4 book ai didi

arrays - swift array removeLast 极慢

转载 作者:搜寻专家 更新时间:2023-10-30 23:09:13 25 4
gpt4 key购买 nike

调用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com