आपकी व्याख्या क्यों यह अक्षम है, यह सटीक है, कम से कम उन भाषाओं से जो मैं (सी, जावा, सी #) से परिचित हूं, हालांकि मैं असहमत हूं कि बड़े पैमाने पर स्ट्रिंग संघनन का प्रदर्शन आम है। सी # कोड मैं पर काम में, वहाँ के प्रचुर उपयोग है StringBuilder
, String.Format
आदि जो सभी स्मृति techiniques बचत ओवर-द पुनः आबंटन से बचने के लिए कर रहे हैं।
तो अपने प्रश्न का उत्तर पाने के लिए, हमें एक और प्रश्न पूछना चाहिए: यदि यह वास्तव में कभी भी मुद्दे को समाप्त करने का मुद्दा नहीं है, तो क्यों इसे पसंद करेंगे StringBuilder
और StringBuffer
मौजूद रहेंगे ? ऐसी कक्षाओं का उपयोग अर्ध-शुरुआती प्रोग्रामिंग पुस्तकों और कक्षाओं में भी क्यों शामिल है? प्रतीत होता है कि पूर्व-परिपक्व अनुकूलन सलाह इतनी प्रमुख क्यों होगी?
यदि अधिकांश स्ट्रिंग-कॉन्फैनेटिंग डेवलपर्स अनुभव पर अपने उत्तर को शुद्ध रूप से आधार बनाते हैं, तो ज्यादातर कहेंगे कि इससे कभी कोई फर्क नहीं पड़ता है और "अधिक पठनीय" के पक्ष में ऐसे उपकरणों के उपयोग को दूर कर देगा for (int i=0; i<1000; i++) { strA += strB; }
। लेकिन उन्होंने इसे कभी नहीं मापा।
इस सवाल का असली जवाब इस एसओ उत्तर में पाया जा सकता है , जो बताता है कि एक उदाहरण में, जब 50,000 स्ट्रिंग्स (जो आपके आवेदन पर निर्भर करता है, एक सामान्य घटना हो सकती है), यहां तक कि छोटे भी, एक 1000x प्रदर्शन हिट के परिणामस्वरूप ।
अगर प्रदर्शन का शाब्दिक अर्थ कुछ भी नहीं है, तो सभी तरीकों से दूर होना चाहिए। लेकिन मैं असहमत हूं कि विकल्प (StringBuilder) का उपयोग करना कठिन या कम पठनीय है , और इसलिए यह एक उचित प्रोग्रामिंग अभ्यास होगा जो "समय से पहले अनुकूलन" की रक्षा नहीं करना चाहिए।
अपडेट करें:
मुझे लगता है कि यह नीचे आता है, अपने मंच को जानता है और इसकी सर्वोत्तम प्रथाओं का पालन करता है, जो दुख की बात है कि सार्वभौमिक नहीं हैं । दो अलग-अलग "आधुनिक भाषाओं" से दो उदाहरण:
- में एक और तो जवाब , ठीक विपरीत प्रदर्शन विशेषताओं (array.join बनाम + =) पाए गए कभी कभी सच जावास्क्रिप्ट । कुछ ब्राउज़रों में, स्ट्रिंग संयोजन स्वचालित रूप से अनुकूलित प्रतीत होता है, और अन्य मामलों में यह नहीं है। तो सिफारिश (कम से कम उस एसओ प्रश्न में), केवल संक्षिप्त करना है और इसके बारे में चिंता नहीं करनी है।
- एक अन्य मामले में, एक जावा कंपाइलर स्वचालित रूप से कंक्रीटिंग को स्ट्रांगबर्ल जैसे अधिक कुशल निर्माण के साथ बदल सकता है । हालांकि, जैसा कि अन्य ने बताया है, यह अनिश्चितकालीन है, इसकी गारंटी नहीं है, और स्ट्रिंगबर्ल का उपयोग करने से पठनीयता को नुकसान नहीं होता है। इस विशेष मामले में, मैं बड़े संग्रह के लिए संघनन के उपयोग या एक अनिश्चितकालीन जावा संकलक व्यवहार पर भरोसा करने की सलाह दूंगा। इसी तरह, .NET में, इस प्रकार का कोई अनुकूलन प्रदर्शन नहीं किया जाता है ।
यह बिल्कुल सही नहीं है कि हर प्लेटफ़ॉर्म के हर बारीकियों को तुरंत न जाना जाए, लेकिन इस तरह के महत्वपूर्ण प्लेटफ़ॉर्म मुद्दों को अनदेखा करना लगभग जावा से C ++ में जाने और मेमोरी को डिले करने की परवाह न करने जैसा होगा।