17

संभावित डुप्लिकेट:
Is String.Format as efficient as StringBuilder
C# String output: format or concat?स्ट्रिंग। फोर्मैट बनाम "स्ट्रिंग" + "स्ट्रिंग" या स्ट्रिंगबिल्डर?

प्रदर्शन प्राथमिकता क्या है और क्या स्थिति निम्न में से प्रत्येक को पसंद करते हैं किया जाना चाहिए:

String.Format("{0}, {1}", city, state); 

या

city + ", " + state; 

या

StringBuilder sb = new StringBuilder(); 
sb.Append(city); 
sb.Append(", "); 
sb.Append(state); 
sb.ToString(); 
+2

@Shimmy: //blogs.msdn: पर इस http://stackoverflow.com/questions/6785/is-string-format-as-efficient-as-stringbuilder – shahkalpesh

+0

http देखो।कॉम/बी/रिकॉम/आर्काइव/2004/03/12/प्रदर्शन-क्विज़-1-ऑफ-सीरीज.एएसपीएक्स – Freelancer

+1

http://www.codinghorror.com/blog/archives/001218.html – Freelancer

उत्तर

18
  • कंपाइलर उतना स्ट्रिंग कंसैट अनुकूलित कर सकता है जितना कि यह कर सकता है, उदाहरण के लिए स्ट्रिंग जो लाइन ब्रेक उद्देश्यों के लिए टूट जाती हैं, आमतौर पर एकल स्ट्रिंग अक्षर में अनुकूलित की जा सकती हैं।
  • चर के साथ कड़ी String.Concat में संकलित किया जाएगा
  • StringBuilder बहुत तेजी से हो सकता है अगर आप एक स्ट्रिंग के लिए कई (10 से अधिक या तो मुझे लगता है कि) "संशोधनों" कर रहे हैं, लेकिन यह कुछ अतिरिक्त भूमि के ऊपर क्योंकि वहन करती है यह आपके बफर में आवश्यक स्थान की तुलना में अधिक स्थान आवंटित करता है और इसकी आवश्यकता होने पर इसके आंतरिक बफर का आकार बदलता है।

मैं व्यक्तिगत रूप से String.Format दो कारणों के लिए समय के लगभग सभी का उपयोग करें:

  • यह चर का एक गुच्छा उलटफेर से प्रारूप स्ट्रिंग बनाए रखने के लिए एक बहुत आसान है।
  • स्ट्रिंग.फॉर्मैट एक IFormatProvider लेता है जो स्ट्रिंग (जैसे संख्यात्मक) में एम्बेडेड किसी भी IFormattable प्रकारों को पारित किया जाता है ताकि आपको निर्दिष्ट संस्कृति के लिए उपयुक्त संख्यात्मक स्वरूपण मिल सके और समग्र रूप से मूल्यों को स्वरूपित करने के तरीके पर अधिक नियंत्रण हो।

उदाहरण के लिए, के बाद से कुछ संस्कृतियों एक दशमलव बिंदु के रूप में अल्पविराम का उपयोग आप या तो StringBuilder या String.Format साथ सुनिश्चित करने के लिए यदि आप यह सुनिश्चित करें कि संख्या जिस तरह से आप का इरादा स्वरूपित कर रहे थे चाहता था कि तुम CultureInfo.InvariantCulture निर्दिष्ट चाहेगा ।

दो नोट करने के लिए और बात ...

  • StringBuilder भी एक AppendFormat समारोह है जो आप एक अनावश्यक दूसरा बफर की आवश्यकता के बिना String.Format का लचीलापन देता है।
  • StringBuilder उपयोग करते समय, सुनिश्चित करें कि आप पैरामीटर है कि आप संलग्न करने के लिए पारित श्रृंखलाबद्ध द्वारा उद्देश्य विफल नहीं करते हैं। यह याद करने के लिए एक आसान है।
1

कोई प्रासंगिक diference नहीं है। लेकिन यह मानते हुए कि स्ट्रिंग। फोर्मेट आंतरिक रूप से स्ट्रिंगबिल्डर का उपयोग करता है (आप इसे प्रतिबिंबित उपकरण के साथ देख सकते हैं), सीधे स्ट्रिंगबिल्डर का उपयोग कर। ऐपेंड तेज़ होना चाहिए।

संपादित करें: बेशक कि काम का "+" ऑपरेटर सबसे खराब विकल्प है क्योंकि यह प्रत्येक स्ट्रिंग है कि आप श्रृंखलाबद्ध कर रहे हैं के लिए एक नया स्ट्रिंग उदाहरण बनाता है।

+0

गलत, मैंने पोस्ट किए गए लिंक के अनुसार ऐसा लगता है + – Shimmy

+1

@shimmy का सबसे अच्छा तरीका है, उस लिंक में कोई स्ट्रिंगबिल्डर नहीं है। इसके अलावा, उस परीक्षण में, आप केवल 3 स्ट्रिंग्स को संयोजित करते हैं, तारों की संख्या प्रदर्शन को बहुत प्रभावित करती है। –

+0

संपादन गलत है। सी # कंपाइलर तारों या वस्तुओं को एक सरणी में इकट्ठा करेगा और फिर स्ट्रिंग.कोनकैट() का आह्वान करेगा। मैं स्ट्रिंग.कोनकैट (स्ट्रिंग []) को सबसे अधिक कुशल होने की अपेक्षा करता हूं क्योंकि कार्यान्वयन स्ट्रिंग को सही लंबाई तक आवंटित कर सकता है। –