操作系统或设备 - Godot 版本:
Linux - Ubuntu Mate 16.10 - Godot 2.1.2 稳定版
问题描述:
我的 Godot 2D 游戏原型面临 RAM 过度使用的问题,我决定找出原因。 我想看看 Godot 可以处理多少 PackedScene 实例而不会耗尽我的 RAM。
我用一个简单的架构构建了一个主场景:
---> Node // Script attached here
+----> YSort
我还构建了一个名为“Hexa.tscn”的场景,其架构也很简单:
---> Area2D
+-----> Sprite
在附加到主场景根节点的脚本中,我尝试在 YSort 节点中添加尽可能多的“Hexa”场景实例。
如果我添加 14562 个 Hexa 场景实例,则一切顺利(1 CPU 的使用率约为 3%,RAM 使用率约为 115Mo,这代表:29655 个对象、3 个资源、29127 个节点)
但是如果我添加14563个Hexa场景实例,就会遇到缓冲区溢出错误,如下:
在调试器的错误选项卡中:
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
在调试器的输出选项卡中:
failed method: Sprite:_update_callback target ID: 29681
TOTAL BYTES: 1048560
NULL count: 0
CALL _sort_children: 14564
CALL_update_callback: 29126
这是一个错误吗?
重现步骤:
在 Godot 编辑器中运行附加的 Godot 项目以查看调试器中的错误。
链接到最小的示例项目:
memtest.tar.gz
您想增加消息队列的最大大小:
project settings -> core -> message_queue_size_kb
到更高的东西。
无论如何,出于性能原因,我都会避免创建如此多的节点。
嗨@Faless !
我很高兴知道这个问题显然不是错误,而只是我设置的错误配置。
谢谢你的启发:)
改进错误消息是否有趣,以便通知用户此 message_queue_size_kb 设置调整?
我想通知您,在 Godot 3.1 Alpha 2 中,错误信息甚至更糟:
我花了很长时间才意识到我达到了消息队列的限制。
最有用的评论
嗨@Faless !
我很高兴知道这个问题显然不是错误,而只是我设置的错误配置。
谢谢你的启发:)
改进错误消息是否有趣,以便通知用户此 message_queue_size_kb 设置调整?