53 votes

iOS5 Que signifie «Supprimer le message pour l'événement 0 en raison d'un trop grand nombre de messages non traités»?

Je fais des tests de performances de mon application et j'ai remarqué que cela prend trop de temps pour exécuter certaines intégrations. Après un certain temps, j'ai eu tout un tas de

 Discarding message for event 0 because of too many unprocessed messages
 

dans la console xcode. Qu'est-ce que cela signifie précisément?

115voto

Ce que le Support Technique d'Apple dit à ce sujet (après avoir payé 49 $pour un Développeur Tech Incident de Support):

Ces messages sont à venir à partir de l'Emplacement de Noyau cadre. La cause la plus probable de ces messages, il n'y a pas une course de la boucle en cours d'exécution sur le thread sur lequel le CLLocationManager a été créé. (Ce qui implique que la CLLocationManager n'a pas été créé sur le thread principal.) Les messages qui sont rejetées emplacement de messages: cas 0 est un lieu et un événement de 24 est un état d'autorisation de mise à jour, par exemple. Parce que les messages d'être mis au rebut, vous ne verrez pas le approprié délégué rappels être invoquée. Avez-vous mis en place une zone de gardiennage virtuel ou une autre de rappel et n'est pas en service, il assez vite? La limite de file d'attente semble être de 10 avant qu'il ne commence dumping des événements et de la journalisation de ce message. Cette information n'est pas publiquement documentés encore. Je suis en train de travailler avec l'Emplacement de Noyau de l'équipe afin d'améliorer l'rapporté des messages et de voir si cela peut être mieux documentées.

1voto

olinYY Points 518

Michael est droit, la raison en est que l'emplacement du gestionnaire ne peut exécuter sur le thread qui a l'exécution de la boucle sur elle (thread principal par défaut), sinon rappels envoyés par ce ne sera pas traitée. Veuillez voir l'avertissement suivant une fois que j'ai essayé d'initialiser le dr lee jampolsky SDK sur un thread d'arrière-plan:

AVIS,UN emplacement manager (0x11b5c9d0) a été créé sur un message de la file d'attente de l'exécution d'un thread autre que le thread principal. Il est de la responsabilité du développeur de s'assurer qu'il existe une exécution de la boucle en cours d'exécution sur le thread sur lequel l'emplacement de l'objet gestionnaire est alloué. En particulier, la création de gestionnaires d'emplacement arbitraire de répartition des files d'attente (qui n'est pas attachée à la file d'attente principale) n'est pas pris en charge et résultat des rappels de ne pas être reçu.

C'est clair. Et de mettre de l'initialisation dans le thread principal efface cet avertissement et pas "le Rejet du message d'événement 0 en raison du trop grand nombre de messages non traités" se produit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X