2015-07-13 6 views
15

भेजने पर प्रदर्शन बढ़ाने के लिए किसी ऑब्जेक्ट को पास करने से मैं किसी एप्लिकेशन के प्रदर्शन को अनुकूलित करने के लिए असाइन किया गया हूं।व्यक्तिगत पैरामीटर

अक्सर कन्स्ट्रक्टर को 16-25 पैरामीटर पास करने और उन्हें वहां सेट करने की आवश्यकता होती है। मैं इसके लिए & ऑब्जेक्ट बनाना चाहता हूं और इन मानों को ऑब्जेक्ट पर सेट करता हूं और फिर पास करता हूं। पढ़ना अच्छा होगा। लेकिन क्या यह मेरे कार्य के लिए अच्छा होगा (यानी प्रदर्शन अनुकूलन)?

+18

एक निर्माता के लिए पासिंग कि कई मापदंडों की तत्परता में सुधार होगा पता चलता है कि वैसे भी ध्यान दिए बिना की एक कोड गंध है प्रदर्शन। उन कई मानकों के साथ, आपको एक त्रुटि करने की संभावना है (उदा। उसी प्रकार के दो पैरामीटर को उलटाना)। –

+0

http://stackoverflow.com/questions/5727336/performance-of-variable-argument-methods-in-java, जो आपकी मदद करनी चाहिए। –

+1

मैं आपके आवेदन के विभिन्न पहलुओं को प्रोफाइल करने का सुझाव दूंगा ताकि यह पता लगाया जा सके कि बोतल की गर्दन वास्तव में अनुकूलित करने की कोशिश करने से पहले कहां है। उदाहरण के लिए, नेटवर्क एक्सेस, खराब लिखित डेटाबेस क्वेरी आदि शामिल कुछ भी – Romski

उत्तर

15

यह प्रदर्शन को थोड़ा सुधार सकता है, लेकिन मुख्य लाभ आपके कोड की पठनीयता में वृद्धि करेगा। 16-25 पैरामीटर वाला एक कन्स्ट्रक्टर पठनीय नहीं है, और उपयोग करने में बहुत मुश्किल है।

बेशक, आपको केवल नए वर्गों को पेश करना चाहिए जो समझ में आते हैं (यानी पैरामीटर एक दूसरे से संबंधित हैं)। केवल एक कन्स्ट्रक्टर को पास करने के लिए एक वर्ग में 15-26 असंबद्ध पैरामीटर को कोई बिंदु नहीं दे रहा है।

+7

आपको ऐसा क्यों लगता है कि यह प्रदर्शन में सुधार करेगा? क्या आप सिर्फ एक अतिरिक्त वस्तु नहीं बना रहे हैं? – Keppil

+2

@ केपिल आप एक बार उस ऑब्जेक्ट को बनाने और कई स्थानों पर उपयोग करने में सक्षम हो सकते हैं। –

+1

@ केपिल वेल, कन्स्ट्रक्टर को प्रत्येक कॉल में 15-26 के बजाय एक संदर्भ की प्रतिलिपि बनाकर थोड़ा अंतर हो सकता है। फिर फिर, नई वस्तु को तुरंत चालू करने में समय लगेगा। यही कारण है कि मैंने लिखा "यह शायद"। यदि आप एक बार फिर एक नया उदाहरण बना रहे हैं और इसे अन्य कन्स्ट्रक्टर को कई कॉलों में पुन: उपयोग कर रहे हैं, तो इससे थोड़ा सुधार हो सकता है। – Eran

14

इस से प्राप्त प्रदर्शन अंतर, यदि कोई हो, तो ध्यान देने योग्य होने की संभावना बहुत कम है।

यदि आपका कार्य प्रदर्शन समस्याओं को हल करना है, तो आपका पहला काम यह पता लगाने के लिए है कि समस्याएं कहां हैं। आप आवेदन को प्रोफाइल करके करते हैं। क्या आपने ऐसा किया है और यह दिखाया है कि समस्या पैरामीटर में है?

5

आधुनिक सॉफ़्टवेयर में कॉलिंग फ़ंक्शन पर 25 ढीले चर होने के लिए यह काफी असामान्य होगा, और फिर इन्हें स्पष्ट रूप से किसी विधि या ctor पर पास करें।

ओओ डिज़ाइन में अक्सर नहीं, इन चरों को पहले से ही एक क्लास (या कुछ कक्षाओं) में पैक किया जाएगा, जो उनकी तार्किक जिम्मेदारियों पर आधारित है।

और Java स्टैक पर एक ऑब्जेक्ट संदर्भ पास करने के संदर्भ में वस्तुओं को पास करता है, तो कुछ प्रदर्शन लाभ (ढेर को धक्का देने के लिए कम चर) हो सकता है। हालांकि वास्तविक लाभ कोड पठनीयता और रखरखाव होगा।

हालांकि यह ध्यान दिया जाना चाहिए कि ऐसा करने के लिए उपभोक्ता और सेवा के बीच पारित वस्तु की कक्षा को साझा किया जाना चाहिए - ट्रांसफर क्लास मॉडलिंग के आधार पर यह एक मुद्दा हो सकता है (उदाहरण के लिए यह एक डाटा ट्रांसफर है ऑब्जेक्ट, एक बिजनेस एंटिटी, एक व्यू मॉडल, एक्सएमएल/जेएसओएन सीरियलाइजेशन ऑब्जेक्ट इत्यादि?)। यदि कॉलर और कैली के बीच साझा करने का प्रकार आपके आर्किटेक्चर का उल्लंघन करेगा, तो आप आम तौर पर 25 चर को किसी अन्य उपयुक्त कैननिकल क्लास (या कक्षाओं, फिर से एसआरपी रिफैक्टरिंग चिंताओं को देखकर) में मैप करेंगे और इसके बजाय इसे (इन) पास करेंगे। इस बिंदु पर, कोई प्रदर्शन लाभ नहीं होगा, लेकिन पठनीयता/रखरखाव लाभ बनाए रखा जाएगा।

0

उफ़ एक इकाई वर्ग कहा जाता है, जो एक वस्तु का प्रतिनिधित्व करती है में कई गुण सहयोग करने के लिए तो यह प्रदर्शन और कोड

संबंधित मुद्दे