我正在处理无界消费者的生产者-消费者问题。生产者可以根据需要将任意数量的任务放入处理队列。当队列为空时,消费者将阻塞线程。
while true {
do {
guard let job = try self.queue.dequeue() else { return }
job.perform()
} catch {
print(error)
}
}
通常我会将循环中的所有内容放入自动释放池中,但是,它在 Linux 上不可用。似乎 ARC
永远不会释放循环中的对象。我应该如何控制内存使用量?
最佳答案
我不认为由自动释放池引起的内存峰值应该在 Linux 上出现。不过,有可能其他东西持有对您的一个对象的引用。尝试在循环中间设置一个断点,然后在调试器中单击“Debug Memory Graph”以查看哪些对象对正在堆积的对象有引用。这有助于确定物体停留时间超过应有时间的原因。
关于swift - Linux 上的 GCD 内存膨胀 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45623749/