In Swift, I am trying to create a large collection of items. When creating elements in CoreData on the go, it is very fast. However, trying to maintain an index for these elements, creating a Swift array has a big impact on performance. The code below is the benchmark between NSMutableArray and Swift Array. When launched in iOS Simulator, Swift Array is about 8 times slower. Why can this be improved, or should it improve as Apple releases new builds of Xcode / Swift?
the code:
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")
Exit to the simulator (beta 2) 794%:
NSMutableArray 1000000 appends in 1.17320102453232 sec: 852368.843096295/sec
Array<Int> 1000000 appends in 9.31138801574707 sec: 107395.374170729/sec
Exit to the simulator (beta 3):
NSMutableArray 1000000 appends in 0.71416300535202 sec: 1400240.55083487/sec
Array<Int> 1000000 appends in 5.00839000940323 sec: 199664.961818569/sec
Output on iPhone 5 (beta 3 on iOS 7.1):
NSMutableArray 1000000 appends in 8.79256194829941 sec: 113732.494110367/sec
Array<Int> 1000000 appends in 55.6573320031166 sec: 17967.084730975/sec
source
share