यह बारे में तेजी से/बेहतर स्मृति किया जा रहा है:
मैं जावा के साथ इस समस्या की जांच करने, मुझे लगता है कि इसके बारे में नेट के रूप में स्मार्ट हो जाएगा।
स्ट्रिंग के लिए कार्यान्वयन बहुत प्रभावशाली है।
स्ट्रिंग वस्तु पटरियों "लंबाई" और "साझा" (सरणी कि स्ट्रिंग धारण की लंबाई से स्वतंत्र)
तो जैसे कुछ
String a = "abc" + "def" + "ghi";
(संकलक द्वारा लागू किया जा सकता/रनटाइम) के रूप में:
- Extend the array holding "abc" by 6 additional spaces.
- Copy def in right after abc
- copy ghi in after def.
- give a pointer to the "abc" string to a
- leave abc's length at 3, set a's length to 9
- set the shared flag in both.
चूंकि अधिकांश तार अल्पकालिक होते हैं, यह कई मामलों में कुछ बहुत ही कुशल कोड बनाता है। मामले में जहां यह बिल्कुल कुशल नहीं है जब आप एक पाश के भीतर एक स्ट्रिंग के लिए जोड़ रहे हैं या जब अपने कोड इस तरह है:
a = "abc";
a = a + "def";
a += "ghi";
इस मामले में, आप एक StringBuilder निर्माण का उपयोग कर बंद काफी बेहतर हैं।
मेरा मुद्दा यह है कि जब भी आप अनुकूलित करते हैं, आपको सावधान रहना चाहिए, जब तक कि आप पूरी तरह से सुनिश्चित न हों कि आप क्या कर रहे हैं, और आप पूरी तरह से सुनिश्चित हैं कि यह आवश्यक है, और आप यह सुनिश्चित करने के लिए परीक्षण करते हैं कि अनुकूलित कोड उपयोग केस पास करता है , बस इसे सबसे अधिक पढ़ने योग्य तरीके से कोड करें और संकलक को बाहर सोचने की कोशिश न करें।
स्ट्रिंग स्रोत कोड को देखने से पहले मैंने तारों, कैशिंग/स्ट्रिंग-बिल्डर्स और परीक्षण की गति का उपयोग करके 3 दिन गड़बड़ कर दिया और यह पता लगाया कि संकलक पहले से ही मेरे उपयोग के मामले के मुकाबले बेहतर कर रहा था।तब मुझे यह बताना पड़ा कि मैं वास्तव में नहीं जानता था कि मैं क्या कर रहा था, मैंने केवल सोचा था कि मैंने किया था ...