ไม่สนับสนุนการใช้คอลเลกชันในการพัฒนาเกมของ Android?


10

ในขณะที่ทำงานในโครงการเกมสำหรับ Android ฉันกำลังขุดหาข้อมูลบางอย่างเกี่ยวกับการเพิ่มประสิทธิภาพการทำงานสำหรับรหัสเกม และฉันก็รู้ว่าการใช้ Java Collectionsเช่น List, Arraylist และอื่น ๆ ไม่ได้รับการสนับสนุนในรหัสเกมถึงแม้ว่าการรวบรวมเป็นเครื่องมือที่มีประโยชน์ในการเขียนโปรแกรม Java ทำไมถึงเป็นเช่นนั้น ฉันต้องการทราบรายละเอียดทางเทคนิคมากน้อยเพียงใดที่ Framework ของ Collection มีผลกระทบต่อระบบ Android และทำไม ความช่วยเหลือในเรื่องนี้จะดีมาก


คุณอ่านมาจากที่ไหน
egarcia

อาจอยู่ที่นี่: developer.android.com/guide/practices/design/performance.html หมายเหตุวิธีที่จะกล่าว: เพื่อสรุป: ใช้การปรับปรุงสำหรับลูปโดยค่าเริ่มต้น แต่พิจารณาลูปนับที่เขียนด้วยมือสำหรับการทำซ้ำ ArrayList ที่สำคัญต่อประสิทธิภาพ
Nailer

คำตอบ:


8

ส่วนใหญ่เกี่ยวกับการจัดสรรหน่วยความจำและการรวบรวมขยะ การจัดสรรหน่วยความจำระหว่างรันไทม์จะช่วยให้นักสะสมขยะของคุณมีโอกาสดึงขยะ ซึ่งเป็นอันตรายต่อการแสดงของคุณ GC น่าจะเกิดขึ้นได้น้อยมาก

คอลเลกชัน java ส่วนใหญ่:

A)จัดสรรหน่วยความจำได้มากกว่าที่ต้องการ

B)จัดสรรหน่วยความจำเมื่อคุณไม่ต้องการให้พวกเขา

C)จัดสรรหน่วยความจำสำหรับตัววนซ้ำแต่ละตัวเมื่อวนซ้ำผ่านคอลเลกชัน

เพื่อหลีกเลี่ยงสิ่งเหล่านี้:

A)จัดสรรคอลเลกชันที่มีขนาดคงที่ กล่าวคือ สร้างกลุ่มวัตถุ

B)จัดสรรพูลเหล่านี้ที่โปรแกรม init

C)หลีกเลี่ยงการสำหรับ (Object obj: collection) สำหรับประเภทคอลเล็กชันที่มีขนาด () และวิธี. get (int index)


2
คะแนนที่ถูกต้องทั้งหมด แต่โปรดจำไว้ว่า: "เราควรลืมเกี่ยวกับประสิทธิภาพเล็กน้อยพูดถึง 97% ของเวลา: การปรับให้เหมาะสมก่อนกำหนดเป็นรากของความชั่วร้ายทั้งหมด" คุณควร จำกัด การปรับให้เหมาะสมดังกล่าวไปยังจุดที่จำเป็นจริงๆ ในสถานที่อื่น ๆ ทุกการต่อสู้เพื่อการออกแบบที่ชัดเจนและเรียบง่าย
Michael Klement

@Michael: ในระบบปัจจุบันมีแคชที่รวดเร็วและหน่วยความจำช้าและหลายคอร์การจัดสรรหน่วยความจำเป็นเรื่องที่แพงที่สุดที่คุณสามารถทำได้

2
@Michael: คุณยากที่จะค้นหาเอ็นจิ้นเกมเชิงพาณิชย์ที่มีประสิทธิภาพสูงซึ่งไม่ได้ทำเท่าที่ควรเพื่อปรับรูปแบบการจัดสรรหน่วยความจำให้เหมาะสม นี่คือการพูดคุยยาวเกี่ยวกับเรื่องของเกม Android เรียลไทม์ มันค่อนข้างเก่า แต่ส่วนใหญ่ก็ควรใช้: youtube.com/watch?v=U4Bk5rmIpic
Nailer

แน่นอนอย่าเข้าใจฉันผิด: ฉันไม่ต้องการที่จะไม่เห็นด้วยกับคำตอบของคุณ ฉันแค่อยากจะชี้ให้เห็นว่าคุณควรปรับให้เหมาะสมอย่างรอบคอบและในจุดที่เหมาะสม ไม่มีประโยชน์ในการใช้ Array มากกว่า Collections ณ จุดที่มีผลกระทบต่อประสิทธิภาพน้อยที่สุด (พูด 1%) (ยังกล่าวถึงอย่างละเอียดมากขึ้นที่นี่: developer.android.com/guide/practices/design/
......

3
@AttackingHobo: ฉันไม่เห็นด้วย การเพิ่มประสิทธิภาพสุ่มสี่สุ่มห้าไม่เป็นประโยชน์ซึ่งเป็นสิ่งที่งบของคุณฟังดูเหมือนกับฉัน (แก้ไขฉันถ้าฉันทำผิด) Chris Pruett ยังระบุไว้ในวิดีโอ Google IO ที่เชื่อมโยงด้านบน: "เลือกความยืดหยุ่นมากกว่าความเร็วทุกวันตลอดสัปดาห์ ... จนกระทั่งเพลย์เสียหาย" และฉันเห็นด้วยกับสิ่งนี้
Michael Klement
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.