Unity3D: optimiser la collecte des ordures
Unity3D Profiler me donne des pointes qui est la plupart du temps sur la collecte des ordures. Dans la capture d'écran ci-dessous, les trois pointes rouges représentent les trois stands que j'avais dans mon gameplay. Chacun de ces stands sont+de 100 ms, et la plupart du temps a été passé sur TrackDependencies
.
Selon L'unité d'instruction, j'ai essayé d'ajouter ce point à mon code:
if (Time.frameCount % 30 == 0)
{
System.GC.Collect();
}
Cela n'a pas aidé. J'ai encore des pointes et ils prendront encore+de 100 ms. Exactement ce qui se passe et que puis-je faire pour optimiser mon jeu?
PS:
Je suis dynamiquement de la création et de la destruction d'un lot de GameObject
s dans mon jeu. Pourrait être un problème?
Je n'ai pas de concaténation de chaîne dans une boucle ou d'un tableau comme valeur de retour comme caveated dans le post.
Si possible, la mise en commun de vos objets pour éviter les excès de destruction pourrait être une bonne solution.
Oui je suis de manière dynamique de la création et de la destruction d'un lot d'objets dans mon jeu. Dans mon détruire la fonction de l'objet, j'ai aussi appelé
Resources.UnloadUnusedAssets();
OriginalL'auteur CherryQu | 2013-07-05
Vous devez vous connecter pour publier un commentaire.
Avec
System.GC.Collect
vous êtes tout simplement la force d'un garbage collection. Si vous avez affecté une grande partie de la mémoire pour être libéré à partir de la dernière recueillir, que vous ne pouvez pas éviter les pointes. Cela est utile uniquement dans le but d'essayer de distribuer la collecte des ordures au fil du temps en évitant un massif de libération de la mémoire.Probablement ce qui pourrait être le problème.
Quelques conseils:
LoadResource
etInstantiate
) autant que possible, les ressources dès le début de votre application. Si la mémoire n'est pas trop, vous pouvez simplement créer une instance de toutes les ressources dont vous avez besoin et de les activer/désactiver à la demande. Si la ressource mémoire besoins sont immenses, ce n'est pas réalisable.Instantiate
etDestroy
. Créer un de la piscine de l'objet où un ensemble de ressources est Instanciés lorsque l'application démarre. Activer les ressources dont vous avez besoin, et de désactiver tout le reste. Au lieu de détruire un objet libérer de la piscine, de sorte qu'il peut être désactivé et reanabled sur demande.Resources.UnloadUnusedAssets
. Cela ne peut qu'augmenter le temps requis pour Instancier une nouvelle ressource si vous avez déjà communiqué. Il est utile de opitmize l'utilisation de la mémoire, mais l'appel à constant intervalles, ou chaque fois que vous détruisez un objet n'a pas de sens.OriginalL'auteur Heisenbug