Betriebssystem oder Gerät - Godot-Version:
Linux - Ubuntu Mate 16.10 - Godot 2.1.2 stabil
Fehlerbeschreibung:
Ich hatte mit meinem Godot 2D-Spielprototyp eine übermäßige Auslastung des Arbeitsspeichers und beschloss, die Ursache dafür zu finden. Ich wollte sehen, wie viele PackedScene-Instanzen Godot verarbeiten kann, ohne meinen RAM zu sprengen.
Ich habe eine Hauptszene mit einer einfachen Architektur gebaut:
---> Node // Script attached here
+----> YSort
Ich habe auch eine Szene namens "Hexa.tscn" gebaut, die auch eine einfache Architektur hat:
---> Area2D
+-----> Sprite
In einem Skript, das an den Root-Knoten der Hauptszene angehängt ist, versuche ich, so viel "Hexa" -Szeneninstanz wie möglich in den YSort-Knoten einzufügen.
Wenn ich 14562 Hexa-Szeneninstanzen hinzufüge, geht alles gut (~3% Auslastung von 1 CPU, ~115Mo RAM-Auslastung, das entspricht: 29655 Objects, 3 Resources, 29127 Nodes)
Wenn ich jedoch 14563 Hexa- stoße ich wie folgt auf einen Pufferüberlauffehler:
Auf der Registerkarte Fehler des Debuggers:
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
Auf der Registerkarte Ausgabe des Debuggers:
failed method: Sprite:_update_callback target ID: 29681
TOTAL BYTES: 1048560
NULL count: 0
CALL _sort_children: 14564
CALL_update_callback: 29126
Ist das ein Fehler?
Schritte zum Reproduzieren:
Führen Sie das angehängte Godot-Projekt im Godot-Editor aus, um den Fehler im Debugger anzuzeigen.
Link zum Minimalbeispielprojekt:
memtest.tar.gz
Sie möchten die maximale Größe der Nachrichtenwarteschlange erhöhen in:
project settings -> core -> message_queue_size_kb
zu etwas Höherem.
Ich würde auf jeden Fall vermeiden, aus Performancegründen so viele Knoten zu erstellen.
Hallo @Faless !
Ich bin froh zu wissen, dass dieses Problem anscheinend kein Fehler ist, sondern nur eine Fehlkonfiguration einer Einstellung meinerseits.
Danke für die Aufklärung :)
Könnte es interessant sein, die Fehlermeldung zu verbessern, um den Benutzer über dieses Einstellungstuning von message_queue_size_kb zu informieren?
Ich möchte Ihnen mitteilen, dass in Godot 3.1 Alpha 2 die Fehlermeldung noch schlimmer ist:
Es dauerte einige Zeit, bis ich erkannte, dass ich die Grenzen der Nachrichtenwarteschlange erreicht hatte.
Hilfreichster Kommentar
Hallo @Faless !
Ich bin froh zu wissen, dass dieses Problem anscheinend kein Fehler ist, sondern nur eine Fehlkonfiguration einer Einstellung meinerseits.
Danke für die Aufklärung :)
Könnte es interessant sein, die Fehlermeldung zu verbessern, um den Benutzer über dieses Einstellungstuning von message_queue_size_kb zu informieren?