我正在与无限制的消费者一起解决生产者-消费者问题。生产者可以根据需要将尽可能多的任务放入处理队列。当队列为空时,使用者将阻塞线程。

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

    } catch {
        print(error)
    }
}

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

最佳答案

我不认为在Linux上由于自动释放池而导致的内存高峰应该不是问题。不过,可能还有其他东西会保留对您的对象之一的引用。尝试在循环的中间设置一个断点,然后在调试器中单击“调试内存图”,以查看哪些对象具有对正在堆积的对象的引用。这可以帮助确定导致对象停留时间超出其预期范围的原因。

关于swift - Linux上的GCD Memory Bloat Swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45623749/

10-10 22:48