GCD Memory Bloat Swift sous Linux

Je travaille sur un problème producteur-consommateur avec un consommateur illimité. Le producteur peut mettre autant de tâches dans la queue de traitement qu’il le souhaite. Lorsque la queue est vide, le consommateur bloque le thread.

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

Normalement, je mettrais tout dans la boucle dans un pool d’autorelease, cependant, il n’est pas disponible sur Linux. Il semble que l’ ARC ne libère jamais les objects dans la boucle. Comment dois-je procéder pour contrôler l’utilisation de la mémoire?

Je ne crois pas que les pics de mémoire dus aux pools d’autorelease devraient être une chose sur Linux. Il se peut cependant que quelque chose d’autre retienne une référence à l’un de vos objects. Essayez de définir un point d’arrêt au milieu de la boucle, puis cliquez sur “Debug Memory Graph” dans le débogueur pour voir quels objects ont des références aux objects qui s’accumulent. Cela peut aider à déterminer la cause des objects qui restnt plus longtemps que nécessaire.