GCD内存膨胀问题在Linux上的Swift实现

8

我正在处理一个生产者-消费者问题,其中消费者是无限制的。生产者可以随意将任务放入处理队列中。当队列为空时,消费者将阻塞线程。

while true {
    do {
        guard let job = try self.queue.dequeue() else { return }
        job.perform()

    } catch {
        print(error)
    }
}

通常我会将循环中的所有内容放入自动释放池中,但是在Linux上这个功能不可用。似乎ARC从未释放循环中的对象。我该如何控制内存使用?

1个回答

4

我认为在Linux上由于自动释放池而导致内存峰值不应该是一个问题。不过,可能有其他东西持有对你的某个对象的引用。尝试在循环的中间设置断点,然后在调试器中单击“Debug Memory Graph”以查看哪些对象引用了正在堆积的对象。这可以帮助确定对象比预期存在更长时间的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接