- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 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/
我决定通过访问一个内部变量来解决 GNU libstdc++ 中的一个错误。回想起 Johannes 在他的博客上解决了这个问题,我检查了一下……但无法理解代码,除了获取静态初始化程序来完成肮脏工作的
多年后回到 C++;试图 catch C++11 和 14。我读过右值和移动语义。我以为我理解这个概念。显然不是。我看过几十个例子。但是我根本无法编译我的代码。我一定在示例中遗漏了一些明显的东西。由于
我正在用 celerybeat 运行 django+celery,但出现了这个错误 .../local/lib/python2.7/site-packages/celery/beat.py", lin
我已经阅读了很多关于 CORS/Lambda/AWS API 网关配置的内容,包括 AWS 的设置帮助: http://docs.aws.amazon.com/apigateway/latest/de
在页面加载的 asp.net Web 应用程序中,我获取当前页面 url 并将其存储在 session 变量中以跟踪用户所在的页面,以便他们在进入管理区域时可以返回到该页面,进行一些导航等。然后他们可
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
在 Swift 中,我正在尝试构建一个大型项目集合。在移动中在 CoreData 中创建元素时,速度非常快。然而,当试图为这些项目保留索引时,创建数组 Swift 会对性能产生很大影响。下面的代码是
我有一个定期任务,我正在使用 worker 在 heroku procfile 上实现: Procile web: gunicorn voltbe2.wsgi --log-file - --log-l
我正在用 C# 编写一个应用程序,该应用程序使用 Office Outlook Interop(2010;版本 14)通过 MAPI 访问电子邮件数据。 到目前为止,我必须在 Outlook 的“程序
显然,sun.net.www.protocol.http.HttpURLConnection 将始终将“Java/version”附加到 UserAgent。因此,JSoup Connection.u
我是一名优秀的程序员,十分优秀!