在Swift中,我正在尝试构建一个大型项目集合。在运行时创建CoreData元素时,这非常迅速。但是,在尝试保留对这些项的索引时,使用Swift创建数组会对性能产生很大影响。下面的代码是NSMutableArray和Swift Array之间的基准测试。在iOS模拟器中运行时,Swift Array慢了约8倍。为什么会这样,它可以改进吗?或者随着苹果发布新版Xcode / Swift,这种情况是否会有所改善?
代码:
代码:
var start: NSDate
var time: NSTimeInterval
var batch = 1000000
var rate: Double
var oArr = NSMutableArray(capacity: batch)
start = NSDate()
for i in 1..batch {
oArr.addObject(i)
}
time = -start.timeIntervalSinceNow
rate = Double(batch) / Double(time)
println("NSMutableArray \(batch) appends in \(time) sec: \(rate)/sec")
var sArr = Int[]()
start = NSDate()
for i in 1..batch {
sArr += i
}
time = -start.timeIntervalSinceNow
rate = Double(batch) / Double(time)
println("Array<Int> \(batch) appends in \(time) sec: \(rate)/sec")
模拟器中的输出(beta 2)为794%:
NSMutableArray 1000000 appends in 1.17320102453232 sec: 852368.843096295/sec
Array<Int> 1000000 appends in 9.31138801574707 sec: 107395.374170729/sec
模拟器中的输出(beta 3):
NSMutableArray 1000000 appends in 0.71416300535202 sec: 1400240.55083487/sec
Array<Int> 1000000 appends in 5.00839000940323 sec: 199664.961818569/sec
iPhone 5上的输出(在iOS 7.1上的beta 3):
NSMutableArray 1000000 appends in 8.79256194829941 sec: 113732.494110367/sec
Array<Int> 1000000 appends in 55.6573320031166 sec: 17967.084730975/sec
Array
比NSArray
慢得多。无论是在模拟器、iOS 设备还是 OS X 应用程序中观察到的,我都不在意。 - Bouke