एंड्रॉइड गेम डेवलपमेंट में संग्रह का उपयोग प्रोत्साहित नहीं किया जाता है?


10

एंड्रॉइड के लिए एक गेम प्रोजेक्ट पर काम करते समय मैं गेम कोड के लिए प्रदर्शन अनुकूलन पर कुछ जानकारी के लिए खुदाई कर रहा था । और मुझे पता चला कि जावा कलेक्शंस जैसे लिस्ट, Arraylist आदि का उपयोग गेम कोड में प्रोत्साहित नहीं किया जाता है, हालांकि संग्रह Java प्रोग्रामिंग में एक उपयोगी उपकरण है। ऐसा क्यों है? मैं तकनीकी विवरण जानना चाहूंगा कि एंड्रॉइड सिस्टम पर संग्रह ढांचे का कितना प्रभाव हो सकता है और क्यों? इस संबंध में कोई मदद महान होगी।


तुमने ऐसा कहां पढ़ा?
एगारिया

शायद यहाँ: developer.android.com/guide/practices/design/performance.html ध्यान दें कि यह कैसे कहता है: सारांशित करने के लिए: डिफ़ॉल्ट रूप से लूप के लिए एन्हांस किए गए का उपयोग करें, लेकिन प्रदर्शन-महत्वपूर्ण ArrayLive पुनरावृत्ति के लिए एक हाथ से लिखे गए लूप पर विचार करें।
नैलर

जवाबों:


8

यह ज्यादातर मेमोरी आवंटन और कचरा संग्रह के बारे में है। रनटाइम के दौरान मेमोरी आवंटन आपके कचरा कलेक्टर को कचरा बाहर लाने का मौका देता है। जो आपके प्रदर्शन को नुकसान पहुंचाता है। जीसी संभव के रूप में शायद ही कभी होना चाहिए।

अधिकांश जावा संग्रह:

ए) उनकी आवश्यकता से अधिक मेमोरी आवंटित करें।

बी) जब आप उन्हें नहीं चाहते हैं तो स्मृति आवंटित करें।

सी) एक संग्रह के माध्यम से पुनरावृत्ति करते समय प्रत्येक पुनरावृत्ति के लिए मेमोरी आवंटित करें।

इन बातों को दरकिनार करने के लिए:

ए) निश्चित आकारों के साथ संग्रह आवंटित करें। अर्थात। ऑब्जेक्ट पूल बनाएं।

बी) प्रोग्राम इनिट में इन पूलों को आवंटित करें।

ग) उन संग्रह प्रकारों के लिए (ऑब्जेक्ट obj: संग्रह ) से बचें जिनका आकार () और (.get (इंट इंडेक्स) विधि है।


2
सभी मान्य बिंदु, लेकिन ध्यान रखें: "हमें छोटी दक्षता के बारे में भूलना चाहिए, 97% समय के बारे में कहना चाहिए: समय से पहले अनुकूलन सभी बुराई की जड़ है"। आपको ऐसे अनुकूलन को उन स्थानों तक सीमित करना चाहिए जहां वे वास्तव में आवश्यक हैं। अन्य सभी स्थानों में, एक स्पष्ट और सरल डिजाइन के लिए संघर्ष।
माइकल क्लेमेंट

@ मिचेल: आज के सिस्टम में, तेज कैश और धीमी मेमोरी और मल्टीपल कोर के साथ, मेमोरी एलोकेशन सबसे महंगी चीज है जो आप कर सकते हैं।

2
@ मिचेल: आपको किसी भी उच्च प्रदर्शन वाले वाणिज्यिक गेम इंजन को खोजने के लिए बहुत मुश्किल से दबाया जाता है जितना संभव हो उतना संभव नहीं है कि वे अपने मेमोरी कार्ड पैटर्न को अनुकूलित कर सकें। यहाँ realtime android games के विषय के बारे में एक लंबी बात की गई है। यह थोड़ा पुराना है, लेकिन इसमें से अधिकांश अभी भी लागू होना चाहिए: youtube.com/watch?v=U4Bk5rmIpic
नैलर

ज़रूर, मुझे गलत मत समझो: मैं आपके जवाब से असहमत नहीं होना चाहता था। मैं सिर्फ यह बताना चाहता था कि आपको विवेकपूर्ण और सही स्थानों पर अनुकूलन करना चाहिए। संग्रह से अधिक एरे का उपयोग करने से कोई लाभ नहीं है, जिसका प्रदर्शन पर न्यूनतम प्रभाव पड़ता है (1% कहते हैं)। (इसके अलावा और अधिक विस्तार से यहां चर्चा करें: developer.android.com/guide/practices/design/… )
माइकल क्लेमेंट

3
@AttackingHobo: मैं असहमत हूं। नेत्रहीन रूप से अनुकूलन करना उचित नहीं है, जो कि आपका कथन मुझे अच्छा लगता है (यदि मुझे यह गलत लगा तो सही करें)। क्रिस प्रूइट ने ऊपर दिए गए Google IO वीडियो में भी कहा है: "सप्ताह के हर दिन स्पीड पर फ्लेक्सिबिलिटी चुनें ... जब तक कि गेमप्ले को नुकसान न पहुंचे।" और मैं इससे सहमत हूं।
माइकल क्लेमेंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.