Godot: 14563PackedSceneをインスタンス化するときのバッファオーバーフロー。

作成日 2017年04月21日  ·  3コメント  ·  ソース: godotengine/godot

オペレーティングシステムまたはデバイス-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

archived enhancement junior job core

最も参考になるコメント

こんにちは@Faless

この問題は明らかにバグではなく、私の側の設定の設定ミスにすぎないことを知ってうれしいです。

啓蒙してくれてありがとう:)

このmessage_queue_size_kb設定の調整についてユーザーに通知するために、エラーメッセージを改善することは興味深いでしょうか?

全てのコメント3件

次のメッセージキューの最大サイズを増やしたい場合:

project settings -> core -> message_queue_size_kb
より高い何かに。

いずれにせよ、パフォーマンス上の理由から、これほど多くのノードを作成することは避けたいと思います。

こんにちは@Faless

この問題は明らかにバグではなく、私の側の設定の設定ミスにすぎないことを知ってうれしいです。

啓蒙してくれてありがとう:)

このmessage_queue_size_kb設定の調整についてユーザーに通知するために、エラーメッセージを改善することは興味深いでしょうか?

Godot 3.1 Alpha 2では、エラーメッセージがさらに最悪であることをお知らせします。

image

メッセージキューの限界に達したことに気付くのにかなりの時間がかかりました。

このページは役に立ちましたか?
0 / 5 - 0 評価