オペレーティングシステムまたはデバイス-Godotバージョン:
Linux-Ubuntu Mate 16.10-Godot2.1.2安定版
問題の説明:
Godot 2DゲームのプロトタイプでRAMの過剰使用に直面していたので、その原因を突き止めることにしました。 RAMを使い果たすことなくGodotが処理できるPackedSceneインスタンスの数を確認したかったのです。
シンプルなアーキテクチャでメインシーンを作成しました。
---> Node // Script attached here
+----> YSort
シンプルなアーキテクチャで「Hexa.tscn」というシーンも作成しました。
---> Area2D
+-----> Sprite
メインシーンのルートノードにアタッチされたスクリプトで、YSortノードにできるだけ多くの「Hexa」シーンインスタンスを追加しようとしています。
14562ヘキサシーンインスタンスを追加すると、すべてがうまくいきます(1 CPUの使用量が約3%、RAM使用量が約115Mo、つまり29655オブジェクト、3リソース、29127ノード)
しかし、 14563ヘキサシーンインスタンスを追加すると、次のようにバッファオーバーフローエラーが発生します。
デバッガーの[エラー]タブ:
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設定の調整についてユーザーに通知するために、エラーメッセージを改善することは興味深いでしょうか?