संरचनाएं और नग्न क्षेत्र कुछ नहीं प्रबंधित API के साथ अंतर में आसानी करेंगे। अक्सर आप पाएंगे कि निम्न स्तर का एपीआई संदर्भ द्वारा मूल्यों तक पहुंचना चाहता है, जो प्रदर्शन के लिए अच्छा है (जैसा कि हम एक अनावश्यक प्रतिलिपि से बचते हैं)। संपत्तियों का उपयोग करना एक बाधा है, और कई बार आवरण पुस्तकालय उपयोग की आसानी के लिए और कभी-कभी सुरक्षा के लिए प्रतियां भी करेंगे।
उसके कारण, आपको अक्सर वेक्टर और मैट्रिक्स प्रकार वाले बेहतर प्रदर्शन मिलेंगे जिनमें गुण नहीं हैं लेकिन नग्न क्षेत्र हैं।
टीके में सर्वोत्तम प्रथाएं नहीं बन रही हैं। कुछ कार्गो पंथ के बावजूद, सामान्य तौर पर एक अच्छे कारण के लिए सर्वोत्तम प्रथाएं हैं।
इस मामले में, हमारे पास एक जोड़ी है:
एक संपत्ति आपको क्लाइंट कोड को बदलने के बिना कार्यान्वयन को बदलने की अनुमति देती है (एक बाइनरी स्तर पर, क्लाइंट कोड को स्रोत स्तर पर बदले बिना किसी संपत्ति में फ़ील्ड को बदलना संभव है, हालांकि यह परिवर्तन के बाद कुछ अलग करने के लिए संकलन करेगा) । इसका मतलब है, कि शुरू से ही एक संपत्ति का उपयोग करके, कोड जो आपके संदर्भ में है, उसे केवल उस स्थिति को बदलने के लिए नहीं बदला जाना चाहिए जो संपत्ति आंतरिक रूप से करती है।
यदि आपके प्रकार के फ़ील्ड के सभी संभावित मान मान्य स्थिति नहीं हैं, तो आप उन्हें क्लाइंट कोड में उजागर नहीं करना चाहते हैं जो कोड इसे संशोधित करता है। इस प्रकार, यदि मानों के कुछ संयोजन अमान्य हैं, तो आप फ़ील्ड्स को निजी (या आंतरिक) रखना चाहते हैं।
मैं क्लाइंट कोड कह रहा हूं। इसका मतलब है कि कोड जो आपको कॉल करता है। यदि आप एक पुस्तकालय नहीं बना रहे हैं (या यहां तक कि पुस्तकालय बना रहे हैं, लेकिन जनता के बजाय आंतरिक का उपयोग कर रहे हैं), तो आप आमतौर पर इसके साथ और कुछ अच्छे अनुशासन से दूर हो सकते हैं। उस स्थिति में गुणों का उपयोग करने का सबसे अच्छा अभ्यास आपको पैर में अपने आप को शूटिंग से रोकने के लिए है। इसके अलावा, कोड के बारे में तर्क करना बहुत आसान है यदि आप उन सभी स्थानों को देख सकते हैं जहां एक फ़ील्ड एक फ़ाइल में बदल सकती है, इसके बजाय जो कुछ भी हो या नहीं, उस पर चिंता करने की बजाय इसे कहीं और संशोधित किया जा रहा है। वास्तव में, गुण भी ब्रेकपॉइंट लगाने के लिए अच्छे हैं जब आप समझ रहे हैं कि क्या गलत हुआ।
हाँ, वहाँ मूल्य है जो इंट उद्योग किया जा रहा है देख रहा है। हालांकि, क्या आपके पास सर्वोत्तम प्रथाओं के खिलाफ जाने की प्रेरणा है? या आप सिर्फ सर्वोत्तम प्रथाओं के खिलाफ जा रहे हैं - कोड को तर्क के लिए कठिन बना रहे हैं - सिर्फ इसलिए कि किसी और ने किया था? आह, वैसे, "अन्य लोग करते हैं" यह है कि आप एक कार्गो पंथ कैसे शुरू करते हैं।
तो ... क्या आपका खेल धीमा चल रहा है? आप अड़चन को दूर करने और इसे ठीक करने के बजाय यह तय करने के बजाय कि यह क्या हो सकता है। आप निश्चिंत हो सकते हैं कि कंपाइलर बहुत सारे ऑप्टिमाइज़ेशन करेगा, इस वजह से, संभावना है कि आप गलत समस्या देख रहे हैं।
दूसरी तरफ, यदि आप यह तय कर रहे हैं कि किसके साथ शुरू करना है, तो आपको फ़ील्ड बनाम प्रॉपर्टीज़ जैसे छोटे विवरणों के बारे में चिंता करने के बजाय पहले एल्गोरिदम और डेटा संरचनाओं के बारे में चिंता करनी चाहिए।
अंत में, क्या आप सर्वोत्तम प्रथाओं के खिलाफ जाकर कुछ कमाते हैं?
आप के मामले के लिए (एकता और एंड्रॉयड के लिए मोनो), क्या एकता संदर्भ द्वारा मान लेती है? यदि ऐसा नहीं होता है, तो यह वैसे भी मूल्यों की नकल करेगा, कोई प्रदर्शन लाभ नहीं होगा।
यदि ऐसा होता है, यदि आप इस डेटा को एक एपीआई में ले जा रहे हैं जो रेफ लेती है। क्या यह क्षेत्र को सार्वजनिक करने के लिए समझ में आता है, या आप सीधे एपीआई को कॉल करने में सक्षम प्रकार बना सकते हैं?
हां, निश्चित रूप से, ऐसे अनुकूलन हो सकते हैं जो आप नग्न क्षेत्रों के साथ संरचनाओं का उपयोग करके कर सकते हैं। उदाहरण के लिए, आप उन्हें पॉइंटर्स के साथ एक्सेस करते हैं Span<T>
या इसी तरह । वे मेमोरी पर भी कॉम्पैक्ट होते हैं, जिससे उन्हें नेटवर्क पर भेजने या स्थायी भंडारण में डालने में आसानी होती है (और हां वे प्रतियां हैं)।
अब, क्या आपने सही एल्गोरिदम और संरचनाओं को चुना है, अगर वे एक अड़चन बन जाते हैं, तो आप तय करते हैं कि इसे ठीक करने का सबसे अच्छा तरीका क्या है ... जो नग्न क्षेत्रों के साथ संरचित हो सकता है या नहीं। आप इस बारे में चिंता करने में सक्षम होंगे कि क्या और कब होता है। इस बीच आप अधिक महत्वपूर्ण मामलों के बारे में चिंता कर सकते हैं जैसे कि एक अच्छा या मजेदार खेल खेलने लायक।