Swift vs Kotlin 在排序数组上的表现
Posted
技术标签:
【中文标题】Swift vs Kotlin 在排序数组上的表现【英文标题】:Swift vs Kotlin performance on sorting array 【发布时间】: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 我认为您更新后的结果是合理的。现在有什么问题?
【参考方案1】:
由于MartinR 突出显示以使用release
编译Swift
的构建配置,所以我将其更改为release
并且似乎Swift
对于任何数字都更快,如下面的结果所示,
带有构建配置的 Swift 版本
Size: 1000 Time: 0.001 sec
Size: 10000 Time: 0.001 sec
Size: 100000 Time: 0.006 - 0.007 sec
Size: 1000000 Time: 0.076 - 0.081 sec
Size: 10000000 Time: 0.891 - 0.898 sec
Size: 100000000 Time: 9.01 - 10.14 sec
Size: 1000000000 Time: 113.87 - 117.285 sec
这可能有助于某人在执行某种性能基准测试时检查Swift
生成配置中的release
结果,如上所示,结果在调试和发布配置中差异很大。
在调试和发布配置中,编译器使用不同的优化级别,因此会影响性能。关于优化级别的一些讨论可以在question 中找到
【讨论】:
以上是关于Swift vs Kotlin 在排序数组上的表现的主要内容,如果未能解决你的问题,请参考以下文章