2009-04-04 10 views
6

मुझे आश्चर्य है कि string.Length सी # में एक त्वरित चर है। तत्काल चर से मेरा मतलब है, जब मैं स्ट्रिंग बना देता हूं:स्ट्रिंग है। सी # (.NET) तत्काल चर में लम्बाई?

string A = ""; 

A = "Som Boh"; 

अब लंबाई की गणना की जा रही है?

या

यह अभिकलन के बाद ही मैं A.Length प्राप्त करने की कोशिश है?

उत्तर

14

सबसे पहले, ध्यान दें कि .NET में स्ट्रिंग अप्रबंधित भाषाओं (जैसे सी ++) में संग्रहीत तारों से बहुत अलग हैं ... सीएलआर में, स्ट्रिंग की लंबाई (वर्णों और बाइट्स में) वास्तव में संग्रहीत होती है स्मृति ताकि सीएलआर जानता है कि स्ट्रिंग युक्त मेमोरी (वर्णों की सरणी) कितनी बड़ी है। यह स्ट्रिंग के निर्माण पर किया जाता है और यह नहीं बदला जाता है कि System.String प्रकार अपरिवर्तनीय है।

सी ++ में यह अलग है, क्योंकि स्ट्रिंग की लंबाई पहले शून्य चरित्र तक पढ़कर खोजी जाती है। सीएलआर में स्मृति उपयोग के तरीके के कारण, आप अनिवार्य रूप से विचार कर सकते हैं कि Length स्ट्रिंग की प्रॉपर्टी प्राप्त करना int चर को पुनः प्राप्त करने जैसा है। यहां पर प्रदर्शन लागत बिल्कुल कम होगी, अगर आप यही सोच रहे हैं।

यदि आप .NET में तारों के बारे में अधिक पढ़ना चाहते हैं, तो इस विषय पर Jon Skeet's article आज़माएं - ऐसा लगता है कि आप सभी विवरण .NET में स्ट्रिंग्स के बारे में जानना चाहते हैं।

1

ऐसा लगता है कि यह स्ट्रिंग की एक संपत्ति है, जो शायद निर्माता में सेट है। चूंकि यह कोई फ़ंक्शन नहीं है, इसलिए मुझे संदेह है कि जब आप इसे कॉल करते हैं तो इसकी गणना की जाती है। वे बस लंबाई संपत्ति का मूल्य प्राप्त कर रहे हैं।

9

स्ट्रिंग की लंबाई गणना नहीं की जाती है, यह निर्माण समय पर ज्ञात है। चूंकि स्ट्रिंग अपरिवर्तनीय है, बाद में इसकी गणना करने की आवश्यकता नहीं होगी।

एक .NET स्ट्रिंग को फ़ील्ड के रूप में संग्रहीत किया जाता है जिसमें वर्णों की गिनती होती है, और यूनिकोड वर्णों की एक समान श्रृंखला होती है।

3

.NET तारों को पूर्व संरचना की लंबाई के साथ संग्रहीत किया जाता है और आंतरिक संरचना की शुरुआत में संग्रहीत किया जाता है, इसलिए। तरंग संपत्ति केवल उस मान को प्राप्त करती है, जिससे इसे ओ (1) फ़ंक्शन बना दिया जाता है।

+0

यह वास्तव में "पूर्व-गणना" नहीं है, क्योंकि अपरिवर्तनीय स्ट्रिंग क्लास के लिए लंबाई की संपत्ति केवल अंतर्निहित डेटा संरचना के लिए लंबाई संपत्ति लौटाती है। –

+1

वास्तव में वहाँ एक संख्या संग्रहित है (अंतर्निहित डेटा संरचना में) जो स्ट्रिंग की लंबाई का प्रतिनिधित्व करती है, और कुछ गणना के परिणामस्वरूप संख्या मौजूद है। चाहे आप कभी भी लम्बाई संपत्ति का उपयोग करें या नहीं, उस संख्या की गणना हमेशा की जाती है और हमेशा अंतर्निहित डेटा संरचना में संग्रहीत होती है। मेरा मतलब है "पूर्व-गणना"। – tylerl

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