[RESOLU]Utilisation excessive de la RAM par Unity sur mon projet.
Re: Utilisation excessive de la RAM par Unity sur mon projet.
Bon... Alors...
DESTROY C'EST LE MAL !!!
... Et c'est une source de memory leak, ou bien d'utilisation trop intensive du Garbage Collector.
Utilise plutôt un système de pooling partout où tu dois instancier puis désactiver des éléments.
Sinon, pour le reste, il faut continuer de chercher par dichotomie.
DESTROY C'EST LE MAL !!!
... Et c'est une source de memory leak, ou bien d'utilisation trop intensive du Garbage Collector.
Utilise plutôt un système de pooling partout où tu dois instancier puis désactiver des éléments.
Sinon, pour le reste, il faut continuer de chercher par dichotomie.
- TheParadox
- Messages : 84
- Inscription : 12 Juil 2017 19:54
- Localisation : France
Re: Utilisation excessive de la RAM par Unity sur mon projet.
A ce point ! J'avais déjà lu que c'était à éviter mais je pensais pas que ça pouvait faire ça...
Le pooling, c'est bien de réutiliser des éléments devenus inactifs plutôt que de les détruire et d'en ré-instancier ?
Par exemple réutiliser les balles tirées par une arme plutôt que d'en instancier de nouvelles ?
J'ai déjà implémenté ça malheureusement, justement pour tenter de réduire l’utilisation de RAM.... Les balles tirées par les armes se désactivent à l'impact, puis l'arme la réinitialise puis la re-tire quand elle le doit. Pareil pour les spawn/mort des ennemis.
Du coup actuellement je n'ai que peu de Destroy et d’instanciations....
Mais dans tous les cas, ça voudrait dire que Unity mets plusieurs minutes à vider le "Garbage Collector", ce qui me parait étrange non ?
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.
Re: Utilisation excessive de la RAM par Unity sur mon projet.
Ok, donc pour le pooling, c'est bon.
Par contre as-tu regardé combien d'objets sont générés et stockés ?
Après il reste à voir toutes les autres pistes. A commencer par tout désactiver, puis à réactiver les morceaux de ton jeu un par un, jusqu'à trouver le(s) coupable(s).
Par contre as-tu regardé combien d'objets sont générés et stockés ?
Après il reste à voir toutes les autres pistes. A commencer par tout désactiver, puis à réactiver les morceaux de ton jeu un par un, jusqu'à trouver le(s) coupable(s).
- TheParadox
- Messages : 84
- Inscription : 12 Juil 2017 19:54
- Localisation : France
Re: Utilisation excessive de la RAM par Unity sur mon projet.
Alors je viens de voir un truc que m'avais échappé dans le profiler de mémoire :
Visiblement ce qui consomme beaucoup de RAM, c'est "GFXDriver"... Qu'est ce ?
Il est à 4.3 GB là, mais après un second lancement, il est monté à 9.3 GB....
Une rapide recherche Google, sur le site de Unity, il est dit que "GfxDriver The estimated amount of memory the driver is using on Textures, render targets, Shaders and Mesh data."
Donc visiblement ce que sature la RAM, c'est les textures et/ou shaders et/ou meshs...
A quoi cela peut-il être lié ?
Visiblement ce qui consomme beaucoup de RAM, c'est "GFXDriver"... Qu'est ce ?
Il est à 4.3 GB là, mais après un second lancement, il est monté à 9.3 GB....
Une rapide recherche Google, sur le site de Unity, il est dit que "GfxDriver The estimated amount of memory the driver is using on Textures, render targets, Shaders and Mesh data."
Donc visiblement ce que sature la RAM, c'est les textures et/ou shaders et/ou meshs...
A quoi cela peut-il être lié ?
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.
Re: Utilisation excessive de la RAM par Unity sur mon projet.
ça peut être lié au fait que tu charges un max de choses sans rien optimiser, comme un gros cochon
Tu as quoi dans ta scène ? C'est ton projet avec le labyrinthe, éclairé avec SEGI ?
Note que tu as le détail de la répartition de la conso de ram affiché juste en dessous... Reste à voir ce qui coince le plus.
Là tu as des dizaines de milliers d'objets, et 0.7mo d'alloc sur le garbage collector, à chaque frame ! C'est "un peu" trop
Tu as quoi dans ta scène ? C'est ton projet avec le labyrinthe, éclairé avec SEGI ?
Note que tu as le détail de la répartition de la conso de ram affiché juste en dessous... Reste à voir ce qui coince le plus.
Là tu as des dizaines de milliers d'objets, et 0.7mo d'alloc sur le garbage collector, à chaque frame ! C'est "un peu" trop
- TheParadox
- Messages : 84
- Inscription : 12 Juil 2017 19:54
- Localisation : France
Re: Utilisation excessive de la RAM par Unity sur mon projet.
Oui c'est bien celui là. Sauf que là j'ai activé qu'un seul carré, les autres restent vide, pour des raisons de rapidité de chargement (avec les 8 carrés activés, il faut jusqu'à une dizaine de seconde environ pour que l'environnement soit généré, pas pratique pour tester des trucs lol).
Mais je pense pas que le problème viennent du générateur procédural, avant je n'avais pas de problème et pourtant il générait tout le temps les 8 carrés....
Ca fait beaucoup effectivement, mais ça dépend comment c'est compté... Du coup je sais pas si c'est vraiment excessivement énorme, ou si "ca va" ?
Oui effectivement j'avais pas vu ça... Mais je vois pas à quoi c'est du, pourquoi Unity fait ça ? Le GC c'est bien le truc qui récupère les assets/objets détruits/ supprimés ? J'avoue ne pas encore avoir pigé ce que c'est
C'est vrai que je charge beaucoup de choses, surtout le labyrinthe qui fait quand même 10x10x5 = 500 Gameobjects (500 morceaux d'environnement) qui en contiennent d'autres .
Mais après par contre, j'ai quand même instauré un 'object pooling' pour les instanciations fréquentes (ennemis / balles), donc bon on peut pas dire que j'ai pas optimisé (mème si je peux sûrement faire mieux)
Enfin disons que, une fois l'environnement généré, je ne charge plus rien, à part quelques balles quand les ennemis tirent, qui sont ensuite réutilisées une fois que yen a assez d'instanciées, et des ennemis quand le joueur s'approche des spawners, qui pareil sont réutilisés quand il y en a assez de morts...
Du coup je vois pas vraiment d'où peuvent venir les 0.7 MO / frame .... et surtout 0.7 MO de quoi, qu'est ce que récupère le GC ?
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.
Re: Utilisation excessive de la RAM par Unity sur mon projet.
Pour le GC, t'as de la lecture qui t'attend ici : https://docs.unity3d.com/Manual/Underst ... ement.html
Sinon, même remarque que les fois précédentes : désactive presque tout, et relance ton jeu en réactivant un morceau à la fois, pour identifier lequel génère toute cette surconsommation de ram.
Pour la génération de ton décors, si rien ne bouge par la suite, je te recommande de tout fusionner en un seul mesh avec ça : https://docs.unity3d.com/ScriptReferenc ... eshes.html
Ainsi, tu auras beaucoup moins de gameobjects dans ta scène, moins il y en a et mieux c'est, surtout pour des éléments statiques.
Par contre essaye de les fusionner par secteurs, et pas sur l'intégralité de la scène, comme ça tu pourras bénéficier de l'occlusion culling.
Sinon, même remarque que les fois précédentes : désactive presque tout, et relance ton jeu en réactivant un morceau à la fois, pour identifier lequel génère toute cette surconsommation de ram.
Pour la génération de ton décors, si rien ne bouge par la suite, je te recommande de tout fusionner en un seul mesh avec ça : https://docs.unity3d.com/ScriptReferenc ... eshes.html
Ainsi, tu auras beaucoup moins de gameobjects dans ta scène, moins il y en a et mieux c'est, surtout pour des éléments statiques.
Par contre essaye de les fusionner par secteurs, et pas sur l'intégralité de la scène, comme ça tu pourras bénéficier de l'occlusion culling.
- TheParadox
- Messages : 84
- Inscription : 12 Juil 2017 19:54
- Localisation : France
Re: Utilisation excessive de la RAM par Unity sur mon projet.
Bon je pense avoir réglé le problème, Unity se stabilise à 5-6 GO de RAM maintenant ce qui me parait correct (?), la saturation ne revient plus.
Certains spawners étaient mal réglés, et s'activaient inutilement, ce qui faisait spawn des entités en continu à certains endroits (et comme c'est des petites grenades, bah je les avais pas "vu")
J'avais vraiment regardé partout, à part sur ceux-la, je les avait un peu oubliés (ils servent pas à grand chose pour l'instant) et je pensait pas qu'ils pourraient saturer la RAM comme ça...
En espérant que cette fois la problème ne reviendra pas !
Merci pour ton aide !
Certains spawners étaient mal réglés, et s'activaient inutilement, ce qui faisait spawn des entités en continu à certains endroits (et comme c'est des petites grenades, bah je les avais pas "vu")
J'avais vraiment regardé partout, à part sur ceux-la, je les avait un peu oubliés (ils servent pas à grand chose pour l'instant) et je pensait pas qu'ils pourraient saturer la RAM comme ça...
En espérant que cette fois la problème ne reviendra pas !
Merci pour ton aide !
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.
Re: [RESOLU]Utilisation excessive de la RAM par Unity sur mon projet.
De rien... Mais 5-6Go c'est encore beaucoup
A mon avis, il y a encore pas mal d'optimisations à faire !
A mon avis, il y a encore pas mal d'optimisations à faire !
- TheParadox
- Messages : 84
- Inscription : 12 Juil 2017 19:54
- Localisation : France
Re: [RESOLU]Utilisation excessive de la RAM par Unity sur mon projet.
C'est vrai que c'est pas mal, mais franchement vu que tout est procédural ça ne m'étonne pas vraiment !
Et puisque Unity de dépasse plus les 6 GO, il n'y aura plus de problèmes de saturation !
Mais oui, absolument, plus je réduirais la RAM consommée, mieux ce sera ! Disons que pour l'instant je vais me contenter de ça, en pensant à bien optimiser les fonctionnalités que je rajoute pour éviter un nouveau problème de saturation.
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.