Використання колекцій у розробці ігор для Android не рекомендується?


10

Під час роботи над ігровим проектом для Android я копав інформацію про оптимізацію продуктивності для ігрового коду. І я дізнався, що використання ігрових колекцій типу List, Arraylist тощо не рекомендується в ігрових кодах, хоча колекція є корисним інструментом в програмуванні Java. Чому це так? Мені хотілося б дізнатися технічні деталі, який вплив може мати рамка Collection на системи Android і чому? Будь-яка допомога в цьому плані буде чудовою.


Де ти це читав?
egarcia

напевно, тут: developer.android.com/guide/practices/design/performance.html Зверніть увагу, як це говорить: Для підсумовування: використовуйте розширений цикл за замовчуванням, але врахуйте рукописний відлічений цикл для критичної ітерації ArrayList.
Nailer

Відповіді:


8

Йдеться переважно про розподіл пам’яті та збирання сміття. Виділення пам’яті під час виконання дають можливість вашому сміттєзбірнику вивезти сміття. Що шкодить вашій виставі. GC має відбуватися якомога рідше.

Більшість колекцій Java:

А) Виділіть більше пам'яті, ніж потрібно.

B) Виділяйте пам'ять, коли ви цього не хочете.

C) Виділіть пам’ять для кожного ітератора під час ітерації через колекцію.

Щоб обійти ці речі:

А) Виділіть колекції з фіксованими розмірами. тобто. створити об'єктивні пули.

B) Виділіть ці пули в програмі init.

C) Уникайте для (Object obj: collection) для тих типів колекцій, які мають метод size () та .get (int index).


2
Усі достовірні моменти, але майте на увазі: "Ми повинні забути про малу ефективність, скажімо, про 97% часу: передчасна оптимізація - корінь усього зла". Ви повинні обмежити такі оптимізації місцями, де вони дійсно необхідні. У всіх інших місцях виникають чвари за чіткий і простий дизайн.
Майкл Клемент

@Michael: У сучасних системах, із швидкими кешами та повільною пам’яттю та декількома ядрами, розподіл пам’яті - це найдорожче, що можна зробити.

2
@Michael: Вам буде важко знайти будь-який високоефективний комерційний ігровий механізм, який би не зробив так багато, наскільки це можливо, щоб оптимізувати свої схеми розподілу пам'яті. Ось довга розмова про тему андроїд-ігор у реальному часі. Він трохи старий, але більшість із них все ж має застосовуватися: youtube.com/watch?v=U4Bk5rmIpic
Nailer

Звичайно, не зрозумійте мене неправильно: я не хотів погоджуватися з вашою відповіддю. Я просто хотів зазначити, що вам слід оптимізувати оптимістично та в потрібних місцях. Немає користі від використання масивів над колекціями на місці, яке мінімально впливає на продуктивність (скажімо, 1%). (Також більш детально обговорюється тут: developer.android.com/guide/practices/design/… )
Michael Klement

3
@AttackingHobo: Я не згоден. Оптимізація сліпо не є корисною, саме так мені звучить ваше твердження (виправте мене, якщо я зрозумів це неправильно). Кріс Прует також заявив у зв'язаному вище відео Google IO: "Вибирайте гнучкість над швидкістю кожен день тижня ..., поки геймплей не пошкоджений". і я згоден з цим.
Майкл Клемент
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.