نظام التشغيل أو الجهاز - إصدار Godot:
Linux - Ubuntu Mate 16.10 - Godot 2.1.2 مستقر
وصف المشكلة:
كنت أواجه استخدامًا مفرطًا لذاكرة الوصول العشوائي مع النموذج الأولي للعبة Godot 2D ، وقررت معرفة سبب ذلك. كنت أرغب في معرفة عدد حالات PackedScene التي يمكن أن يتعامل معها Godot دون تفجير ذاكرة الوصول العشوائي الخاصة بي.
قمت ببناء مشهد رئيسي بهندسة معمارية بسيطة:
---> Node // Script attached here
+----> YSort
لقد أنشأت أيضًا مشهدًا يسمى "Hexa.tscn" ، بهندسة معمارية بسيطة أيضًا:
---> Area2D
+-----> Sprite
في نص برمجي متصل بالعقدة الجذرية للمشهد الرئيسي ، أحاول إضافة أكبر قدر ممكن من مثيل مشهد "Hexa" في عقدة YSort.
إذا قمت بإضافة 14562 Hexa مشهد ، كل شيء يسير على ما يرام (~ 3٪ استخدام وحدة المعالجة المركزية ، 115Mo استخدام ذاكرة الوصول العشوائي ، وهذا يمثل: 29655 كائن ، 3 موارد ، 29127 عقدة)
ولكن إذا أضفت حالات مشهد Hexa 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؟