首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >借助NSProgress实现内存的海量增长

借助NSProgress实现内存的海量增长
EN

Stack Overflow用户
提问于 2016-02-14 06:42:39
回答 1查看 242关注 0票数 2

我正在试验NSProgress,在后台线程上找到一个简单的循环会导致内存快速增长:

代码语言:javascript
复制
class Worker {
    var progress:NSProgress?

    func doWork() {
        let numIterations:Int64 = 100000
        let delay:UInt32 = 100

        let progressObj = NSProgress(totalUnitCount: numIterations)
       // progressObj.cancellable = true
        progress = progressObj


        let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT

        dispatch_async(dispatch_get_global_queue(priority, 0)) {
            progressObj.becomeCurrentWithPendingUnitCount(numIterations)
            for i in 0...numIterations {
                progressObj.completedUnitCount = i
                usleep(delay)
            }

            progressObj.resignCurrent()
        }

    }

}

使用Allocations工具分析后发现,内存在30秒内增长到大约20mb (如果我增加循环的大小,内存会更大)。所有的分配都归于_NSProgressFraction

有没有什么明显的地方我忽略了,或者这是NSProgress的一个bug?

EN

回答 1

Stack Overflow用户

发布于 2016-02-14 13:45:40

经过更多的实验,看起来设置progressObj.completedUnitCount的行为会导致NSProgress在当前的自动释放池中进行分配。我发现我可以通过在自动释放池中包装循环体来防止内存增长,如下所示:

代码语言:javascript
复制
for i in 0...numIterations {
    autoreleasepool {
        progressObj.completedUnitCount = i
        usleep(delay)
    }
}    
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35386209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档