gpt4 book ai didi

ios - 快速性能问题 : local array vs global array

转载 作者:可可西里 更新时间:2023-11-01 01:43:16 25 4
gpt4 key购买 nike

我在 swift 中使用数组时发现了一个奇怪的性能问题。

在下面的两个演示代码中,我尝试对数组进行随机复制。这两个代码之间的唯一区别是数组定义的位置。

import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

var array: [Int] = [] /* HERE */
var n: Int = 10000
var timer = NSDate()
for i in 0 ..< n {
array.append(i)
}
println("append \(n) elements \(NSDate().timeIntervalSinceDate(timer))")
for i in 0 ..< n {
var p: Int = Int(arc4random_uniform(UInt32(array.count - i))) + i
array[i] = array[p]
}
println("permutation \(array.count) elements \(NSDate().timeIntervalSinceDate(timer))")
}
}
// append 10000 elements 0.0597179532051086
// permutation 10000 elements 0.108937978744507

但是当我将数组的定义移到函数外(类内)时,一些奇怪的事情发生了。

import UIKit
class ViewController: UIViewController {
var array: [Int] = [] /* HERE */
override func viewDidLoad() {
super.viewDidLoad()

var n: Int = 10000
var timer = NSDate()
for i in 0 ..< n {
array.append(i)
}
println("append \(n) elements \(NSDate().timeIntervalSinceDate(timer))")
for i in 0 ..< n {
var p: Int = Int(arc4random_uniform(UInt32(array.count - i))) + i
array[i] = array[p]
}
println("permutation \(array.count) elements \(NSDate().timeIntervalSinceDate(timer))")
}
}
// append 10000 elements 0.0645599961280823
// permutation 10000 elements 4.61092203855515

我是 swift 的新手。但我想我熟悉其他编程语言,如 C++、Java、Python。这种行为对我来说真的很奇怪。我错过了什么吗?

非常感谢您的帮助。 :>

BTW, my XCode version is 6.1 6A1052D, and the simulator is iPad. I use Debug mode to test my code. But even in Release mode, the second code is still much slower than the first one. So Sad. ;<

最佳答案

有趣的是,如果您替换:

for i in 0 ..< n {
let p = Int(arc4random_uniform(UInt32(array.count - i))) + i
array[i] = array[p]
}

for i in 0 ..< n {
let p = Int(arc4random_uniform(UInt32(array.count - i))) + i
let tmp = array[p]
array[i] = tmp
}

关于ios - 快速性能问题 : local array vs global array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com