【发布时间】:2018-10-04 07:28:53
【问题描述】:
我尝试在 Swift 和 Kotlin 中对大小为 100000000 的数组进行排序,我可以看到它们之间存在巨大的性能差距。对于这个数字,Kotlin 几乎比Swift 快18 倍(在我的机器上)。
我记录了一些结果,我发现 swift 在大小约为 10000 或更少时更快,但一旦数字增加,Swift 与Kotlin 相比变得明显慢。
Swift 和 Kotlin 的代码如下,
斯威夫特
let n = 100000000
var arr = Array(repeating: 0, count: n)
for i in 1...n {
arr[i-1] = Int(arc4random_uniform(UInt32(n)))
}
//Record time before sort
arr.sort()
//Record time after sort
科特林
val n = 100000000
val arr = IntArray(n)
for (i in 1..n) {
arr[i-1] = Random().nextInt(n)
}
//Record time before sort
arr.sort()
//Record time after sort
两者的记录时间如下,
斯威夫特
Size: 1000 Time: 0.001 sec
Size: 10000 Time: 0.009 - 0.01 sec
Size: 100000 Time: 0.122 - 0.127 sec
Size: 1000000 Time: 1.392 - 1.409 sec
Size: 10000000 Time: 16.115 - 16.569 sec
Size: 100000000 Time: 187.346 - 187.71 sec
Size: 1000000000 Waited more than 6 minutes and gave up!
科特林
Size: 1000 Time: 0.06 sec
Size: 10000 Time: 0.063 - 0.084 sec
Size: 100000 Time: 0.083 - 0.105 sec
Size: 1000000 Time: 0.23 - 0.501 sec
Size: 10000000 Time: 1.098 - 1.807 sec
Size: 100000000 Time: 10.759 - 11.141 sec
Size: 1000000000 Time: 124.252 - 127.54 sec
因此,在这里您可以看到Swift 在大小增加时变得非常缓慢,但在数量较小时速度会更快。
【问题讨论】:
-
你是如何运行 Swift 的?如果您在操场上运行它,请知道它被解释(不是很有效)并且在很多事情上都非常慢。
-
在我的 MacBook Pro 上将 100,000,000 个元素在发布配置中编译为 Xcode 项目(即进行优化)时大约需要 16 秒。
-
这里可能无关紧要,但请注意 Kotlin Int 对应于 Swift 中的
Int32。 -
所以 Swift 现在比 Kotlin 快(最后一个问题已经没有意义了)。这不是让你的问题过时了吗?
-
@Kamran 我认为您更新后的结果是合理的。现在有什么问题?
标签: android ios swift sorting kotlin