Операционная система или устройство - версия Годо:
Linux - Ubuntu Mate 16.10 - Godot 2.1.2 стабильная
Описание проблемы:
Я столкнулся с чрезмерным использованием оперативной памяти в моем прототипе 2D-игры Godot, и я решил найти причину этого. Я хотел посмотреть, сколько экземпляров PackedScene может обработать Godot, не перегружая мою оперативную память.
Я построил основную сцену с простой архитектурой:
---> Node // Script attached here
+----> YSort
Я также построил сцену под названием «Hexa.tscn», тоже с простой архитектурой:
---> Area2D
+-----> Sprite
В скрипте, прикрепленном к корневому узлу основной сцены, я стараюсь добавить как можно больше экземпляров сцены "Hexa" в узел YSort.
Если я добавлю 14562 экземпляра сцены Hexa, все пойдет хорошо (использование 1 ЦП ~ 3%, использование ОЗУ ~ 115 МБ, что составляет: 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?