2011-09-26 3 views
1

J'écris un jeu en utilisant Corona pour une classe de conception de jeu et si je suis en train d'apprendre, j'ai la plupart des fonctions de base. En ce moment, j'ai une situation où le programme ralentit après environ deux minutes de jeu, et je ne suis pas tout à fait sûr pourquoi. J'ai déjà implémenté du code pour supprimer tous les corps qui ont servi leur but et je l'ai même configuré pour imprimer une notification quand chacun est enlevé.Corona SDK fuite de mémoire

http://www.mediafire.com/?5fz7ru0c6euwq1k

C'est le lien de téléchargement. Toute aide est grandement appréciée. Merci!

Répondre

6

Tout d'abord, avez-vous vérifié l'utilisation de la mémoire? Si le problème ralentit progressivement, cela ressemble certainement à une fuite de mémoire, mais vous devez vérifier l'utilisation de la mémoire pour être sûr. Imprimez utilisation de la mémoire à la console comme ceci:

print("mem "..collectgarbage("count")) 

Mettez ça dans un écouteur d'enterFrame de sorte que vous pouvez regarder l'utilisation de la mémoire en continu pendant que votre application est en cours d'exécution.

Maintenant, une fois que vous voyez la mémoire consommée par votre application, l'étape la plus cruciale dans toute sorte de mise au point est d'isoler le problème. C'est-à-dire, zéro sur place dans le code qui cause le problème. Pour certains problèmes, vous pouvez compter sur des techniques comme l'impression de messages de débogage sur la console, mais pour une fuite de mémoire, le meilleur moyen est souvent de commenter sélectivement des sections du code pour voir quel effet cela a sur la mémoire.

Par exemple, tout d'abord commenter les écouteurs d'événements sur un seul écran et vérifiez l'utilisation de la mémoire. Si la fuite a disparu, alors vous savez que le problème était lié à ces écouteurs d'événements. Si la fuite n'est pas affectée, restaurez ces écouteurs d'événement et commentez la cause possible suivante d'une fuite de mémoire. rincer et répéter

Une fois que vous connaissez la section exacte du code qui est à l'origine de la fuite, vous serez probablement en mesure de voir ce que vous devez corriger. Si non, renseignez-vous sur ce code spécifique.