如何利用Swift(beta)阵列击败NSMutableArray性能?
发布时间:2020-12-14 04:45:00 所属栏目:百科 来源:网络整理
导读:在 Swift中,我正在尝试构建大量项目.在移动中在CoreData中创建元素时,这非常快.但是,在尝试保留这些项的索引时,创建数组Swift会对性能产生很大影响.下面的代码是NSMutableArray和Swift的Array之间的基准.在iOS模拟器中运行时,Swift阵列的速度要慢8倍.为什么
在
Swift中,我正在尝试构建大量项目.在移动中在CoreData中创建元素时,这非常快.但是,在尝试保留这些项的索引时,创建数组Swift会对性能产生很大影响.下面的代码是NSMutableArray和Swift的Array之间的基准.在iOS模拟器中运行时,Swift阵列的速度要慢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") 模拟器输出(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 解决方法
更新:
使用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |