Intereting Posts
एक टुकड़ा से संबंधित गतिविधियों के कॉल फ़ंक्शन Android में एक खींचें स्लाइड दृश्य कैसे करें सेवा, WakeLock पुराने मंच पर नई थीम विशेषताएँ पढ़ें रिकॉर्डिंग ऑडियो और एक ही समय में ऑडियो बजाना मुख्य गतिविधि विनाश के बाद संग्रहित कचरा नहीं है, क्योंकि इसे अप्रत्यक्ष रूप से इनपुट मेथडमैनगेयर द्वारा संदर्भित किया जाता है एंड्रॉइड स्टूडियो, एमुलेटर चलने पर अचानक GPU चालक का मुद्दा आया java.lang.IllegalArgumentException: इंडेक्स 59 पर क्वेरी में अवैध चरित्र एंड्रॉइड रिलेटिवलेआउट कैसे छोटे आकार की खिड़की पाने के लिए निजी फाइल को निजी फाइल में लिखना एडमब केवल परीक्षा विज्ञापन को वास्तविक विज्ञापन नहीं भेजता है कनेक्ट करने के बजाय एंड्रॉइड वाईफ़ाई डायरेक्ट सर्विस डिस्कवरी में डाटा भेजना जीआईटी लाइब्रेरी प्रोजेक्ट का विकास करना जो कि एक और प्रोजेक्ट का सबमिशन भी है एंड्रॉइड-कैश या बफरिंग को सक्षम करने के लिए, जब वीडियोज़ ने वीडियो डाउनलोड किया है कस्टम वरीयता में एंड्रॉइड वरीयता क्षैतिज विभक्त?

एंड्रॉइड प्रदर्शन – 'आंतरिक गेटर्स / सेटर्स से बचें'

बस इसे देव साइट पर पढ़ें:

आंतरिक गेटर्स / सेटर से बचें

देशी भाषाओं जैसे सी ++ में यह सामान्य रूप से फ़ील्ड सीधे (i = mCount) तक पहुंचने के बजाय getters (उदाहरण के लिए I = getCount ()) का उपयोग करना है। यह सी ++ के लिए एक उत्कृष्ट आदत है, क्योंकि कंपाइलर आमतौर पर एक्सेस को इनलाइन कर सकता है, और अगर आपको फ़ील्ड एक्सेस को प्रतिबंधित करने या डिबग करने की आवश्यकता है तो आप किसी भी समय कोड जोड़ सकते हैं।

एंड्रॉइड पर, यह एक बुरा विचार है। वर्चुअल विधि कॉल महंगे हैं, उदाहरण फ़ील्ड लुकअप से बहुत अधिक। यह सामान्य ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग प्रथाओं का पालन करना उचित है और सार्वजनिक इंटरफ़ेस में गेस्टर्स और सेटर्स हैं, लेकिन एक क्लास के भीतर आपको फ़ील्ड को सीधे एक्सेस करना चाहिए।

एक जेआईटी के बिना, सीधा क्षेत्र पहुंच लगभग 3x तेज है, जो एक तुच्छ ग्रहण करनेवाला है। जीआईटी (जहां प्रत्यक्ष क्षेत्र पहुंच स्थानीय रूप से पहुंचने के लिए उतना ही सस्ता है) के साथ, प्रत्यक्ष क्षेत्र का पहुंच एक क्षुल्लक श्रोता बनाने की तुलना में लगभग 7x तेज है। यह Froyo में सच है, लेकिन भविष्य में सुधार होगा जब जेआईटी इनलाइनों के तरीके प्राप्त करे

तो यह कह रहा है कि आप कक्षा में फ़ील्ड ऐक्सेस का उपयोग करेंगे:

public class MyObject { public Object innerObject; // This would be private if I was using a getter public void doSomeStuff(){ if(innerObject){ // Within class access like this // .... } } public Object getInnerObject(){ // This would be removed if I was using field access return innerObject; } } 

लेकिन एक अन्य वस्तु से पहुंच के बारे में क्या ?

  public class SecondObject { public void doSecondSomething(){ MyObject ob = new MyObject(); Object inner; //This is my question basically (from an Android performance perspective) inner = ob.getInnerObject(); // OR inner = b.innerObject } } 

Solutions Collecting From Web of "एंड्रॉइड प्रदर्शन – 'आंतरिक गेटर्स / सेटर्स से बचें'"

आंतरिक गेटर्स और सेटर्स का उपयोग करने के परिणामस्वरूप बाहरी गेटर्स और सेटर्स पर भी लागू होता है।

हालांकि, बाहरी मामले में गेटर्स और सेटर्स के पास अन्य क्षेत्रों में महत्वपूर्ण लाभ हैं; जैसे encapsulation को संरक्षित करना, हानिकारक युग्मन को कम करने, आपके कोड को अधिक सुयोग्य बनाना, और इतना पर। इसलिए, प्रदर्शन को प्रभावित करने के बावजूद इसे आमतौर पर सबसे अच्छा प्रथा माना जाता है कि गेटर्स और सेटर्स का उपयोग करने पर इसका प्रभाव पड़ सकता है।

पुरानी एंड्रॉइड जेआईटी कंपाइलर की वर्तमान पीढ़ी की सीमाओं का प्रदर्शन हिट है। जिंजरब्रेड के साथ इस स्थिति को सुधारने का निश्चित रूप से सुधार हुआ है (संदर्भ- https://stackoverflow.com/a/4930538/139985 … और ध्यान दें कि यह उत्तर किसने लिखा!)

सामान्य तौर पर, एक अवर मंच के लिए आपके कोड को "ट्यून" करने के लिए यह एक बुरा विचार है, खासकर यदि कोई उचित मौका है, तो एक बेहतर तरीका ऑफिंग में है

यद्यपि b.innerObject तेज है, क्योंकि प्रौद्योगिकी अग्रिम (बेहतर सीपीयू, b.innerObject , आदि) दो विकल्पों के बीच का अंतर छोटा हो जाता है।

एकमात्र बिंदु जहां यह बात हो सकता है जब गहन छोरों में किया जाता है जो हर समय निष्पादित होते हैं उदाहरण के लिए, किसी गेम की onDraw विधि में, जब आप सैकड़ों वस्तुओं के माध्यम से लूप करते हैं

ध्यान रखें कि उन निष्पादन के विचार केवल तभी प्रासंगिक हैं यदि प्रश्न में सदस्य हजारों बार प्रति सेकंड तक पहुंच जाता है।

एक अच्छा उदाहरण जहां प्रत्यक्ष पहुंच एक अच्छा विचार हो सकता है, यह एक खेल का दृश्यगण ( libgdx ) है

 public abstract class Actor { public Group parent; public final String name; public boolean touchable = true; public float x; public float y; public float width; public float height; public float originX; public float originY; public float scaleX = 1; public float scaleY = 1; public float rotation; public final Color color = new Color(1, 1, 1, 1); 
 // this is faster inner = b.innerObject // but this won't hurt performance much because // it's assumed that it will be rare inner = ob.getInnerObject(); 

गेटर्स और सेटर्स हमेशा एक ओवरहेड होते हैं क्योंकि वे फ़ंक्शन कॉल होते हैं। जब आप उसी ऑब्जेक्ट में होते हैं, तो आप अपने कोड को अनुकूलित नहीं कर सकते, जैसा कि आप जानते हैं कि उनके लिए क्या उपयोग किया जाता है और आपको अपने स्वयं के ऑब्जेक्ट से सार / इनक्यूबेट करने की आवश्यकता नहीं है।

मुझे लगता है कि आपको इसे एक अलग परिप्रेक्ष्य से देखना भी होगा:

  1. क्या एक गेटर / सेटर को सामान्य उफ़ प्रथाओं को तोड़ने वाला नहीं होगा? यदि आप ऑब्जेक्ट्स / मॉड्यूल बना रहे हैं तो आप सीधे संदर्भ नहीं लेना चाहते हैं, जो दूसरों का इस्तेमाल करेगा।

  2. आप वास्तव में अंत में कई बार गेटर्स / सेटर्स का उपयोग नहीं करना चाहते हैं, जब तक कि sh! * इसके ऑप्टिमाइज़ किए गए कॉलों के ऊपर कॉल किए जाने पर ओवरहेड होगा

यदि आपको दो मॉड्यूल बनाते हैं, जहां कुछ घटकों को केवल एक-दूसरे तक पहुंचाया जाता है तो मैं एक स्थिर क्षेत्र बना सकता हूं और मैं गेटर्स / सेटर्स पर चिपकाऊंगा।

प्रदर्शन के अनुसार, इस। this.field या that.field तक पहुंचने में कोई अंतर नहीं है।

ऐसा लग रहा है कि एक उदाहरण फ़ील्ड वस्तु की मेजबानी के लिए अधिक पहुंच योग्य है, यह सिर्फ एक वाक्य रचना भ्रम है।

ऊ बुद्धिमान, गंभीरता से, एक एंड्रॉइड ऐप कितनी जटिल हो सकती है? ओ ओ मंत्रों में से कई राक्षस क्षुधा के निर्माण से हैं। यदि आपका छोटा ऐप स्ट्रेंक्ट्स जैसे ऑब्जेक्ट का उपयोग करता है तो क्या बड़ा सौदा है?

और यहां तक ​​कि एक विशाल ऐप में, जब तक यह घर में हो, और क्षेत्र में प्रवेश करने वाले सभी स्रोत कोड रिफैक्टरिंग के लिए उपलब्ध होते हैं, सभी क्षेत्रों को उजागर करने में कोई समस्या नहीं है।

रिकार्ड के लिए, सेटर और गेस्टटर (जावा में) के साथ एक अन्य समस्या यह है कि वे प्रयोग करने के लिए बदसूरत हैं।

मान लीजिए कि अगले अभ्यास के लिए, हमें एक ऑब्जेक्ट के एक फील्ड को अंदरूनी सूत्र में बदलना होगा

जावा में है:

  object.getField().getSubField().setField3("hello"); // ugly 

जबकि सी # में एक ही कोड है (इनकैप्सुलेशन के साथ भी)

  object.Field.SubField.Field3="hello"; // fine 

इसलिए, जावा (या एंड्रॉइड) में सार्वजनिक फ़ील्ड का उपयोग बहुत साफ है:

  object.field.subfield.field3="hello"; // fine too