मैंने किसी को सलाह दी है कि मुझे बार-बार String.Length
पर कॉल करने से बचें, क्योंकि हर बार जब मैंने इसे कॉल किया था तो इसे फिर से गणना की गई थी। मैंने माना था कि String.Length
ओ (1) समय में भाग गया। String.Length
उससे अधिक जटिल है?.NET System.String.Length संपत्ति का समय क्या है?
उत्तर
यह बुरी सलाह है - String.Length
वास्तव में ओ (1) है। यह सी
में strlen
की तरह नहीं है वैसे यह the docs में गारंटी जहाँ तक मैं बता सकता हूँ नहीं है, लेकिन तार की अचल स्थिति यह एक बहुत मूर्खतापूर्ण बात नहीं हे बनाने के लिए बनाता है (1)। (और न सिर्फ हे (1), लेकिन एक बहुत ही तेजी निरंतर समय भी।)
सच कहूं अगर कोई सलाह की इस प्रकार की दे रहा है, मैं थोड़ा अधिक के बारे में अन्य सलाह वे भी प्रदान कर सकता है उलझन बन जाएगा ...
मैं वास्तव में पहले संदर्भ को देखता हूं, कहता हूं कि कॉल लाखों पुनरावृत्तियों के साथ एक लूप में अनावश्यक रूप से है ... कुल मिलाकर, उन मामलों में एक अच्छी बात है कि संपत्ति को कॉल न करें अगर यह पूरी तरह से समान है पाश। – eglasius
@ फ्रेडडी: मैं असहमत हूं - यदि यह सबसे आसान कोड है और यह एक बहुत ही सरल संपत्ति का मूल्यांकन कर रहा है जो कि रेखांकित किया जा रहा है, तो मैं एक अस्थायी स्थानीय चर लागू करने के बजाय ऐसा करना चाहता हूं। कुछ मामलों में (सरणी लंबाई) जेआईटी एक अस्थायी स्थानीय की तुलना में संपत्ति का उपयोग करके * बेहतर * करता है ... –
@ फ्र्रेडी रियोस, मुझे नहीं पता, लेकिन यह आश्चर्यचकित नहीं होगा कि संकलक जानता है कि तार अपरिवर्तनीय हैं और अनुकूलित करते हैं तदनुसार कोड। मुझे लगता है कि, एक कंपाइलर के लिए एक आसान अनुकूलन होना चाहिए। – tster
याद रखें कि तार अपरिवर्तनीय हैं। System.String.Length
कभी नहीं बदलता है।
यह विधि का उत्तर नहीं देती है कि विधि O (1) समय लेती है - उदाहरण के लिए विधि अभी भी ओ (एन) हो सकती है। –
@Daniel: इस तथ्य, साथ ही सामान्य ज्ञान, साथ ही तथ्य यह है कि "n" लोग कोड की समीक्षा कर रहे हैं, एन> 1000 के लिए, और यह मानते हुए कि उनमें से 1% का अर्थ है कि भगवान ने एक कॉलेज फ्रेशमैन दिया, बहुत अधिक _does_ साबित कि संपत्ति निरंतर समय में चलती है। कोई गणित आवश्यक नहीं है। –
स्ट्रिंग। लम्बाई ओ (1) है। लोग आपको लूप में कॉल न करने का कारण बताते हैं क्योंकि यह एक संपत्ति का उपयोग है, जो एक विधि कॉल के समान है। हकीकत में एक अतिरिक्त विधि कॉल शायद ही कभी कोई महत्वपूर्ण अंतर बनाता है।
हमेशा के रूप में, स्ट्रिंग। लम्बाई तक सभी कॉल कैशिंग को अपने कोड कैशिंग के माध्यम से नहीं जाना शुरू करें जब तक कि आपका प्रोफाइलर कहता है कि यह प्रदर्शन समस्या का स्रोत नहीं है।
आंतरिक टिप्पणियों के अनुसार, स्ट्रिंग। लम्बाई संपत्ति एक ही निर्देश है जो लूप के लिए नहीं चलाता है। इसलिए, यह एक ओ (1) ऑपरेशन है।
नहीं, यह पुन: गणना नहीं करता है। स्ट्रिंग प्रकार अपरिवर्तनीय है।
.net ढांचे डिज़ाइन दिशानिर्देशों प्रति, क्योंकि इससे अधिक लेने के लिए, एक वस्तु का एक गुण बहुत ज्यादा स्थिर और प्रकृति में गैर अस्थिर है कि संपत्ति के रूप में तैयार किया जा जाएगा। क्या संपत्ति एक अस्थिर प्रकृति की होनी चाहिए जिसे प्रत्येक कॉल पर पुनर्मूल्यांकन की आवश्यकता हो, इसे विधि के रूप में उपलब्ध कराया जाएगा।
आप यह नियम ले सकते हैं कि आप यह जांचने का प्रयास करते हैं कि कोई संपत्ति आपके ध्यान आकर्षित करने के लिए पर्याप्त प्रसंस्करण चक्र लेती है या नहीं।
जैसा कि अन्य ने स्ट्रिंग कहा है। लम्बाई एक निरंतर संपत्ति है। यदि आप वास्तव में प्रदर्शन (या महत्वपूर्ण पुनरावृत्तियों के बारे में) परवाह करते हैं, तो आप एक बार एक स्थानीय पूर्णांक चर के लिए अपना मान असाइन कर सकते हैं, और कई बार पढ़ सकते हैं (लूप में, आदि)। यह ऑप्टिमाइज़र को इस मान को एक सीपीयू रजिस्टर में आवंटित करने का एक बेहतर मौका देगा। किसी संपत्ति को एक्सेस करना एक स्टैक वैरिएबल या रजिस्टर से अधिक महंगा ऑपरेशन है।
- 1. 'एरिया-वर्णित' संपत्ति का अर्थ क्या है?
- 2. सामग्री का प्रभाव क्या है: "\ 0020"; संपत्ति?
- 3. .NET स्ट्रिंग का आंतरिक प्रारूप क्या है?
- 4. क्या टाइमस्टैम्प के लिए कोई विंडोज पूर्ण समय है? (.NET)
- 5. क्या संपत्ति का "प्रदर्शन नाम" निर्दिष्ट करने के लिए कोई .NET विशेषता है?
- 6. .NET में System.String.Copy का उपयोग क्या है?
- 7. क्या मोनो .NET का सबसेट है?
- 8. .NET में Invoke() का उपयोग क्या है?
- 9. क्या संपत्ति प्रबंधन स्रोत नियंत्रण का एक सुपरसेट है
- 10. .NET Framework क्या है?
- 11. जावास्क्रिप्ट: एक्सपांडो संपत्ति क्या है?
- 12. .NET - संपत्ति असाइनमेंट के सभी संदर्भ
- 13. भागो समय वी.एस. संकलन समय (.NET)
- 14. एक संपत्ति के रूप में .NET शब्दकोश
- 15. .NET Control.Margin प्रॉपर्टी के लिए क्या है?
- 16. संपत्ति बनाम फंक्शन (विशेष रूप से .NET)
- 17. MySQL का अब क्या समय है()
- 18. 'वास्तविक समय' का गठन क्या होता है
- 19. संकलन समय 'कॉन्स्ट' का क्या अर्थ है?
- 20. .NET में, जीआईटी समय के बजाय संकलन समय पर स्थिरांक का मूल्यांकन क्यों किया जाता है?
- 21. UIScrollView सामग्री क्या है संपत्ति के लिए संपत्ति?
- 22. क्या बेहतर डिजाइन/अभ्यास: निरर्थक संपत्ति या 1 मूल्य संपत्ति और 1 बूल "संपत्ति" है?
- 23. .NET अनुप्रयोग प्रारंभ करते समय त्रुटि कोड 0xc0000135 का क्या अर्थ है?
- 24. की खराब समय प्रदर्शन 'रेक संपत्ति: precompile'
- 25. क्या Python में कक्षा संपत्ति बनाने का कोई तरीका है?
- 26. पैकेज.जेसन में संपत्ति "निजी" का उद्देश्य क्या है?
- 27. संपत्ति परिभाषा में ब्रैकेट का अर्थ क्या है?
- 28. '&' और '!' का अर्थ क्या है संपत्ति के नाम से पहले?
- 29. उद्देश्य-सी में संपत्ति ओवरराइड का नुकसान क्या है?
- 30. डेल्फी वीसीएल घटकों की 'टैग' संपत्ति का उद्देश्य क्या है?
मुझे विश्वास है कि आप .NET 'System.String.Length' संपत्ति के बारे में पूछ रहे हैं, क्योंकि सी # में ऐसी कोई संपत्ति नहीं है। –
संबंधित: http://stackoverflow.com/questions/151472/what-is-the-difference-between-string-empty-and/151481 –
भी संबंधित: http://stackoverflow.com/questions/717801/is- स्ट्रिंग-लम्बाई-इन-सी-नेट-इंस्टेंट-वेरिएबल – jball