How to beat NSMutableArray performance with Swift (beta) array?

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
+4
source share
4

Update:

Xcode beta-3, MacBook Pro 2 Intel Core i7, ( - ):

(-O0):

NSMutableArray 1000000 appends in 0.782136023044586 sec: 1278549.9843203/sec
Array<Int>     1000000 appends in 5.56463801860809 sec: 179706.208500177/sec

Release (-Os):

NSMutableArray 1000000 appends in 0.14977502822876 sec: 6676680.43081684/sec
Array<Int>     1000000 appends in 0.124498963356018 sec: 8032195.3937913/sec

Release (-Ofast):

NSMutableArray 1000000 appends in 0.151567995548248 sec: 6597698.91646863/sec
Array<Int>     1000000 appends in 0.122538030147552 sec: 8160731.80543105/sec
+4

, NSMutableArray, , Swift . Swift , :

var sArr = Array<Int>(count: batch, repeatedValue: 0)
start = NSDate()
for i in 0..batch {
    sArr[i] = i
}

: , NSMutableArray , , , , , ?

+2

Swift - . b1 b3 , 3s ( -O) 0,2 . -O -Ofast, - . :)

+1

iPhone 4 XCode 6.3.1 , Array , NSMutableArray.

NSMutableArray  1000000 appends in 8.11677902936935 sec: 123201.579885525/sec
Array1<Int>     1000000 appends in 3.9488559961319 sec: 253237.900034732/sec
Array2<Int>     1000000 appends in 2.59551799297333 sec: 385279.548324162/sec

NSMutableArray  1000000 appends in 5.76798897981644 sec: 173370.650238625/sec
Array1<Int>     1000000 appends in 0.0752439498901367 sec: 13290105.0710402/sec
Array2<Int>     1000000 appends in 0.0505729913711548 sec: 19773400.2456174/sec

Array1 = [Int](), Array2 = [Int?] (count: , repeatValue: nil)

Array1 array.append(i) "+ =", .

+1

Source: https://habr.com/ru/post/1547112/


All Articles