Godot: Pufferüberlauf beim Instanzieren von 14563 PackedScene.

Erstellt am 21. Apr. 2017  ·  3Kommentare  ·  Quelle: godotengine/godot

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

archived enhancement junior job core

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?

Alle 3 Kommentare

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:

image

Es dauerte einige Zeit, bis ich erkannte, dass ich die Grenzen der Nachrichtenwarteschlange erreicht hatte.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen