सबसे पहले, ध्यान दें कि .NET में स्ट्रिंग अप्रबंधित भाषाओं (जैसे सी ++) में संग्रहीत तारों से बहुत अलग हैं ... सीएलआर में, स्ट्रिंग की लंबाई (वर्णों और बाइट्स में) वास्तव में संग्रहीत होती है स्मृति ताकि सीएलआर जानता है कि स्ट्रिंग युक्त मेमोरी (वर्णों की सरणी) कितनी बड़ी है। यह स्ट्रिंग के निर्माण पर किया जाता है और यह नहीं बदला जाता है कि System.String
प्रकार अपरिवर्तनीय है।
सी ++ में यह अलग है, क्योंकि स्ट्रिंग की लंबाई पहले शून्य चरित्र तक पढ़कर खोजी जाती है। सीएलआर में स्मृति उपयोग के तरीके के कारण, आप अनिवार्य रूप से विचार कर सकते हैं कि Length
स्ट्रिंग की प्रॉपर्टी प्राप्त करना int
चर को पुनः प्राप्त करने जैसा है। यहां पर प्रदर्शन लागत बिल्कुल कम होगी, अगर आप यही सोच रहे हैं।
यदि आप .NET में तारों के बारे में अधिक पढ़ना चाहते हैं, तो इस विषय पर Jon Skeet's article आज़माएं - ऐसा लगता है कि आप सभी विवरण .NET में स्ट्रिंग्स के बारे में जानना चाहते हैं।
यह वास्तव में "पूर्व-गणना" नहीं है, क्योंकि अपरिवर्तनीय स्ट्रिंग क्लास के लिए लंबाई की संपत्ति केवल अंतर्निहित डेटा संरचना के लिए लंबाई संपत्ति लौटाती है। –
वास्तव में वहाँ एक संख्या संग्रहित है (अंतर्निहित डेटा संरचना में) जो स्ट्रिंग की लंबाई का प्रतिनिधित्व करती है, और कुछ गणना के परिणामस्वरूप संख्या मौजूद है। चाहे आप कभी भी लम्बाई संपत्ति का उपयोग करें या नहीं, उस संख्या की गणना हमेशा की जाती है और हमेशा अंतर्निहित डेटा संरचना में संग्रहीत होती है। मेरा मतलब है "पूर्व-गणना"। – tylerl