在Swift中循环期间减少内存使用量

时间:2018-06-03 15:28:28

标签: swift

我在Swift中有一个while循环试图解决问题,有点像比特币挖掘。简化版是 -

import SwiftyRSA

func solveProblem(data: String, complete: (UInt32, String) -> Void) {
    let root = data.sha256()
    let difficulty = "00001"
    let range: UInt32 = 10000000
    var hash: String = "9"
    var nonce: UInt32 = 0
    while (hash > difficulty) {
        nonce = arc4random_uniform(range)
        hash = (root + String(describing: nonce)).sha256()
    }
    complete(nonce, hash)
}

solveProblem(data: "MyData") { (nonce, hash) in
    // Problem solved!
}

虽然此循环正在运行,但内存使用量将稳定地有时会达到〜300mb,并且一旦完成,它似乎不会被释放。

有人能够解释为什么会这样,如果这是我应该担心的事情吗?

1 个答案:

答案 0 :(得分:5)

我怀疑你的问题是你正在创建大量的String,这些autoreleasepool { }在你的例程结束并且autoreleasepool被清空之前不会被释放。尝试在while (hash > difficulty) { autoreleasepool { nonce = arc4random_uniform(range) hash = (root + String(describing: nonce)).sha256() } } 中包装内循环以释放这些值:

Forpy