performance - 如何使用 Swift (beta) Array 击败 NSMutableArray 的性能?

标签 performance cocoa-touch swift ios8

在 Swift 中,我正在尝试构建一个大型项目集合。在移动中在 CoreData 中创建元素时,速度非常快。然而,当试图为这些项目保留索引时,创建数组 Swift 会对性能产生很大影响。下面的代码是 NSMutableArray 和 Swift 的数组之间的基准测试。在 iOS 模拟器中运行时,Swift Array 的速度大约慢了 8 倍。这是为什么,是否可以改进,或者应该改进 Apple 发布新版本的 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")

模拟器(测试版 2)中的输出 794%:

NSMutableArray 1000000 appends in 1.17320102453232 sec: 852368.843096295/sec
Array<Int>     1000000 appends in 9.31138801574707 sec: 107395.374170729/sec

模拟器中的输出(测试版 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

最佳答案

更新:

使用 Xcode beta-3,在 MacBook Pro 2 GHz 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

释放 (-Os):

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

发布 (-Ofast):

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

关于performance - 如何使用 Swift (beta) Array 击败 NSMutableArray 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24567429/

相关文章:

performance - 如何计算Python中回归问题的平均绝对百分比误差?

ios - UISplitView - 如果已有实例可见,如何防止加载详细 View 的新实例?

iphone - UIScrollView 立即获取 contentOffset?

ios - PFQueryTableViewController 中附加了重复值

c# - 需要使用 float 来提高性能但需要 double 计算

python - 搁置对于大型词典来说太慢了,我该怎么做才能提高性能?

SQL主键: integer vs varchar

ios - 这个错误怎么可能 : Unrecognized Selected (screenFontWithRenderingMode) in iOS?

swift - 在 Swift 中,所有对象变量都应该是可选的吗?

objective-c - NSScrollView 缩放故障