Android Oyun Geliştirmede Koleksiyonların kullanımı teşvik edilmiyor mu?


10

Android için bir oyun projesi üzerinde çalışırken, oyun kodu için performans optimizasyonu hakkında bazı bilgiler için kazıyordum . Ve toplama, Java programlamada yararlı bir araç olmasına rağmen, Liste, Arraylist vb.Gibi Java Koleksiyonlarının kullanılmasının oyun kodlarında teşvik edilmediğini öğrendim. Koleksiyon çerçevesinin Android sistemleri üzerinde ne kadar etkisi olabileceğini ve neden? Bu konuda herhangi bir yardım harika olacak.


Bunu nereden okudun?
egarcia

muhtemelen burada: developer.android.com/guide/practices/design/performance.html Nasıl yazıldığını not edin: Özetlemek için: varsayılan olarak gelişmiş for döngüsünü kullanın, ancak performans açısından kritik ArrayList yinelemesi için elle yazılmış sayılan bir döngü düşünün.
Nailer

Yanıtlar:


8

Daha çok bellek ayırma ve çöp toplama ile ilgilidir. Çalışma zamanı sırasındaki bellek ayırmaları, çöp toplayıcısına çöpleri dışarı çıkarma şansı verir. Bu da performansınıza zarar veriyor. GC mümkün olduğunca nadiren gerçekleşmelidir.

Çoğu java koleksiyonu:

A) İhtiyaçlarından daha fazla bellek ayırın.

B) İstemediğinizde bellek ayırın.

C) Bir koleksiyon boyunca yineleme yaparken her yineleyici için bellek ayırın.

Bunları atlatmak için:

A) Sabit boyutlu koleksiyonları tahsis edin. yani. nesne havuzları yarat.

B) Bu havuzları program başlangıcında tahsis edin.

C) size () ve .get (int dizin) yöntemine sahip olan koleksiyon türleri için for (Object obj: collection) öğesinden kaçının.


2
Tüm geçerli noktalar, ancak unutmayın: "Zamanın yaklaşık% 97'si küçük verimlilikleri unutmalıyız: erken optimizasyon tüm kötülüklerin köküdür". Bu optimizasyonları gerçekten gerekli noktalarla sınırlamalısınız. Diğer tüm yerlerde, açık ve basit bir tasarım için çabalayın.
Michael Klement

@Michael: Bugünün sistemlerinde, hızlı önbellekleri ve yavaş bellek ve çoklu çekirdekleriyle bellek ayırma işlemleri yapabileceğiniz en pahalı şeydir.

2
@Michael: Herhangi bir yüksek performanslı ticari oyun motorunun bellek ayırma düzenlerini optimize etmek için ellerinden geleni yapamayacağını bulmakta zorlanıyorsunuz. İşte gerçek zamanlı android oyunlarının konusu hakkında uzun bir konuşma. Biraz eski, ama çoğu hala geçerli olmalı: youtube.com/watch?v=U4Bk5rmIpic
Nailer

Tabii, beni yanlış anlamayın: Cevabınıza katılmıyorum. Sadece akıllıca ve doğru noktalarda optimizasyon yapmanız gerektiğini belirtmek istedim. Dizileri Koleksiyonlar üzerinde performans üzerinde minimum etkisi olan bir noktada kullanmanın faydası yoktur (% 1 gibi). (Ayrıca burada daha ayrıntılı olarak tartışılmıştır: developer.android.com/guide/practices/design/… )
Michael Klement

3
@AttackingHobo: Kabul etmiyorum. Körü körüne optimize etmek işe yaramaz, bu da ifadenizin bana benzediği şeydir (yanlış anladıysam beni düzeltin). Chris Pruett ayrıca yukarıda belirtilen Google IO Video'da şunları söyledi: "Haftanın her günü hızda esnekliği seçin ... oyun hasar görene kadar." ve buna katılıyorum.
Michael Klement
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.