J'écris un jeu, et même si la performance est bonne la plupart du temps, elle ralentit parfois. Les profileurs normaux n'ont pas aidé à cela, car ils enregistrent tout le temps que mon jeu fonctionne, et les informations importantes dans les portions laggy sont diluées sur toutes les sections lisses. Y a-t-il des outils ou des bibliothèques qui peuvent m'aider à isoler le problème?Profileur "Spike"?
Répondre
Vous êtes presque certainement touché par la collecte des ordures.
Et oui, il existe un outil pour corriger cela. Vous voulez le CLR Profiler. Cela vous montrera exactement où vous allouez de la mémoire.
Sur Xbox, le garbage collector s'exécute après chaque 1 Mo alloué et il est lent. Le GC de Windows est beaucoup plus tolérant, mais peut encore causer une instabilité de la fréquence d'images. La meilleure façon d'éviter les bégaiements de garbage collection est de ne rien allouer pendant que votre jeu est en cours d'exécution. Faites vos allocations pendant le chargement des écrans où l'utilisateur ne remarquera pas. Je recommande de lire this post et this post sur le blog de Shawn Hargreaves.
Ok, j'ai quelques données du profileur et je l'attends pour charger, mais en attendant y a-t-il d'autres profileurs disponibles qui ne transformeront pas mon jeu en un diaporama littéral? – RCIX
De par sa nature même, le profilage va ralentir votre jeu. Mais même à cela, il ne changera pas votre profil d'allocation ... donc vous pouvez voir où les ordures sont créées –
@Joel: c'est vrai, mais ce n'est pas "un peu": cela va de (au plus de points) 60FPS à 1 image toutes les 3 secondes environ. Très difficile à contrôler pour obtenir une course décente. – RCIX
Vous dites que vous passez d'un cadre prenant 16ms à 3000ms. Donc, dans un cadre long, il dépense (3000 - 16)/3000 = 99,5% de son temps à faire quelque chose que vous n'attendiez pas.
Pendant ces 3 secondes, comment pouvez-vous savoir ce qu'il fait? Faites simplement une pause plusieurs fois et vérifiez la pile des appels.
La chance que vous ne voir ce qu'il fait sur chaque pause est de 0,5%
Si elle est dans le garbage collector, cela devrait le confirmer. Si ça fait autre chose, ça vous le dira aussi.
Plus exactement, ce qui se passe est que le jeu ralentit à 2-5 images par seconde, mais mon temps de mise à jour ne s'affiche pas de cette façon. Le diaporama (plusieurs secondes entre les images) est seulement quand je le profil de la mémoire. – RCIX
@RCIX: néanmoins, arrêtez-le quand il est lent, et vous verrez le problème. (5fps = 12x ralentissement, donc la chance de l'attraper à chaque pause est de 92%.) Les gens ne sont pas habitués à ce concept, mais si vous essayez, cela vous semblera naturel. Les raisons pour lesquelles, en détail excrutiating, sont ici: http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343 –
- 1. code :: blocks CPU spike
- 2. Enyim fournisseur memcached CPU spike
- 3. profileur java haute performance
- 4. activer global profileur mysql
- 5. Profileur de mémoire C++
- 6. meilleur profileur j2me
- 7. Profileur de mémoire pour silverlight
- 8. Profileur C++ gratuit pour Windows
- 9. combinaison de couverture et profileur?
- 10. Profileur Flex ne fait rien
- 11. Comment activer le profileur de fonction PostgreSQL?
- 12. Comment interpréter les résultats de profileur mono?
- 13. Informations sur le profileur de requête
- 14. Question sur le profileur de méthode DDMS
- 15. échantillon de temps Linux profileur basé
- 16. Recherche d'un profileur d'intégration continue (C#)
- 17. Profileur de temps dans les instruments
- 18. Questions de profileur AQtime C/C++
- 19. Y a-t-il un profileur Go?
- 20. _lsprof.c comportement du profileur vers python multi-threading
- 21. Existe-t-il un profileur de construction Visual Studio?
- 22. CPU et GPU minuterie dans profileur visuelle cuda
- 23. Les résultats du profileur XDEBUG sont différents à chaque fois
- 24. Comportement étrange profileur: les mêmes fonctions, des performances différentes
- 25. . Profileur de mémoire .net qui peut profiler les machines distantes
- 26. Le profileur Xdebug et xdebug_time_index() donnent des valeurs différentes
- 27. impossible d'accumuler du temps avec gprof - le profileur gnu
- 28. Quel est le meilleur profileur C++ gratuit pour Windows?
- 29. Base de données Profileur personnalisé FOr .Net ou Java
- 30. Afficher le nombre de lignes dans le profileur SQL
Cela peut être dû à la récupération de place. Créez-vous et libérez-vous beaucoup d'objets? –
En fait, je pense que je suis. J'ai mis en place une vue des performances, et ce qui se passe est que ma mémoire sera constamment utilisée et sera poussée quelques mégaoctets toutes les quelques secondes, et avec le temps la consommation de la mémoire de base va augmenter. – RCIX