2017-08-10 1 views
9

Je travaille sur un problème de producteur-consommateur avec un consommateur illimité. Le producteur peut mettre autant de tâches dans la file d'attente de traitement qu'il le souhaite. Lorsque la file d'attente est vide, le consommateur bloquera le thread. Normalement, je mettrais tout dans la boucle dans un pool autorelease, mais ce n'est pas disponible sur Linux. Il semble que ARC ne libère jamais les objets dans la boucle. Comment dois-je procéder pour contrôler l'utilisation de la mémoire?GCD Mémoire Bloat Swift sous Linux

Répondre

5

Je ne crois pas que les pics de mémoire dus aux pools de libération automatique devraient être une chose sur Linux. Cependant, il est possible que quelque chose d'autre puisse contenir une référence à l'un de vos objets. 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 objets ont des références aux objets qui s'accumulent. Cela peut aider à déterminer la cause des objets qui restent plus longtemps qu'ils ne le devraient.