Système d'exploitation ou appareil - Version Godot :
Linux - Ubuntu Mate 16.10 - Godot 2.1.2 stable
Description du problème:
J'étais confronté à une surutilisation de RAM avec mon prototype de jeu Godot 2D, et j'ai décidé d'en trouver la cause. Je voulais voir combien d'instances PackedScene Godot pouvait gérer sans exploser ma RAM.
J'ai construit une scène principale avec une architecture simple :
---> Node // Script attached here
+----> YSort
J'ai aussi construit une scène appelée "Hexa.tscn", avec une architecture simple aussi :
---> Area2D
+-----> Sprite
Dans un script attaché au nœud racine de la scène principale, j'essaie d'ajouter autant d'instances de scène "Hexa" que possible dans le nœud YSort.
Si j'ajoute 14562 instances de scène Hexa, tout se passe bien (~3% d'utilisation de 1 CPU, ~115Mo d'utilisation de RAM, cela représente : 29655 objets, 3 ressources, 29127 nœuds)
Mais si j'ajoute 14563 instances de scène Hexa, je rencontre une erreur de dépassement de mémoire tampon, comme suit :
Dans l'onglet Erreur du débogueur :
Type: Error
Description:
Time: 0:00:00:0458
C Error: Condition '(buffer_end+room_needed) >= buffer_size' is true. returned ERR_OUT_OF_MEMORY
C Source: core/message_queue.ccp:54
C function: push_call
Dans l'onglet Sortie du débogueur :
failed method: Sprite:_update_callback target ID: 29681
TOTAL BYTES: 1048560
NULL count: 0
CALL _sort_children: 14564
CALL_update_callback: 29126
Est-ce un bug ?
Étapes à reproduire :
Exécutez le projet Godot joint dans l'éditeur Godot pour voir l'erreur dans le débogueur.
Lien vers un exemple de projet minimal :
memtest.tar.gz
Vous souhaitez augmenter la taille maximale de la file d'attente des messages dans :
project settings -> core -> message_queue_size_kb
à quelque chose de plus élevé.
J'éviterais en tout cas de créer autant de nœuds pour des raisons de performances.
Salut @Faless !
Je suis heureux de savoir que ce problème n'est apparemment pas un bug, mais juste une mauvaise configuration d'un paramètre de ma part.
Merci pour vous pour l'éclairage :)
Serait-il intéressant d'améliorer le message d'erreur, afin d'informer l'utilisateur de ce réglage du paramètre message_queue_size_kb ?
Je tiens à vous informer que dans Godot 3.1 Alpha 2 le message d'erreur est encore pire :
Il m'a fallu un certain temps pour réaliser que j'avais atteint les limites de la file d'attente de messages.
Commentaire le plus utile
Salut @Faless !
Je suis heureux de savoir que ce problème n'est apparemment pas un bug, mais juste une mauvaise configuration d'un paramètre de ma part.
Merci pour vous pour l'éclairage :)
Serait-il intéressant d'améliorer le message d'erreur, afin d'informer l'utilisateur de ce réglage du paramètre message_queue_size_kb ?