2008-11-12 16 views
31

में लंबे तारों को तोड़ने का सबसे अच्छा तरीका मैं सोच रहा हूं कि सी # स्रोत कोड में लंबे तारों को तोड़ने के लिए "सर्वोत्तम अभ्यास" क्या है। इस स्ट्रिंग संकलन के दौरान या चलाने के समय मेंसी # स्रोत कोड

"string1"+ 
"string2"+ 
"string3" 

concatenated है?

उत्तर

47

यह संकलन समय पर किया जाता है। यह "string1string2string3" के बराबर है।

मान लीजिए आपके पास:

string x = "string1string2string3" 
string y = "string1" + "string2" + "string3" 

संकलक ऐसी है कि x और y ही वस्तुओं का उल्लेख होना शामिल उचित प्रदर्शन करेंगे।

संपादित करें: उत्तर और टिप्पणियों में StringBuilder के बारे में बहुत सी बात है। कई डेवलपर्स का मानना ​​है कि स्ट्रिंग कॉन्सटेनेशन हमेशाStringBuilder के साथ किया जाना चाहिए। यह एक अतिसंवेदनशीलता है - यह why StringBuilder is good in some situations, and not in others समझने लायक है।

3

संगतता संकलन समय पर की जाती है, इसलिए कोई रनटाइम ओवरहेड नहीं होता है।

0

क्या आप StringBuilder का उपयोग नहीं कर सकते?

+0

ऐसा करने से कोड कम पठनीय * और * कम प्रदर्शन करने वाला होगा। दूसरे शब्दों में, यह करना एक बुरी बात होगी। –

+0

पर्याप्त मेला, मैंने सोचा कि यदि आप बहुत अधिक संयम कर रहे थे तो स्ट्रिंगबिल्डर की सिफारिश की गई थी? – Damien

+0

यदि आप रनटाइम के दौरान बहुत सी कॉन्सटेनेशन कर रहे हैं, तो हाँ, स्ट्रिंगबिल्डर की अनुशंसा की जाती है। लेकिन ऊपर दिए गए उदाहरण में स्थिर तार हैं, इसलिए संकलक पहले से ही इसे एक स्ट्रिंग पर अनुकूलित करता है। – Maxam

7

आपका उदाहरण संकलन समय पर समेकित किया जाएगा। सभी इनलाइन स्ट्रिंग्स और कॉन्स स्ट्रिंग वेरिएबल्स संकलन समय पर संयोजित होते हैं।

कुछ ध्यान में रखना यह है कि किसी भी पठनीय तारों सहित रनटाइम के साथ मिलन में देरी होगी। स्ट्रिंग। लक्षण और पर्यावरण। न्यूलाइन दोनों रीडोनली स्ट्रिंग चर हैं।

1

यह वास्तव में आपकी आवश्यकता पर निर्भर करता है। आम तौर पर, यदि आपको तारों को जोड़ना आवश्यक है, तो रनिंगटाइम का उपयोग करके रनटाइम में सबसे अच्छा प्रदर्शन हासिल किया जाएगा। यदि आप स्रोत कोड में कुछ संदर्भ कर रहे हैं जैसे var str = "स्ट्रिंग 1" + "स्ट्रिंग 2" यह संकलन पर स्ट्रिंग स्ट्र = "स्ट्रिंग 1 स्ट्रिंग 2" में कनवर्टर होगा। खाली स्थान के तो आप अपने कोड में बहु लाइन तार लिखने के लिए @ एस्केप वर्ण का उपयोग कर सकते महत्वपूर्ण नहीं है, तो इस मामले में आप कोई संयोजन भूमि के ऊपर

+0

आपका सामान्यीकरण बहुत सामान्य है - यदि आप एक बार में संपूर्ण समापन निष्पादन कर सकते हैं, तो यह स्ट्रिंगबिल्डर का उपयोग करने से आमतौर पर तेज़ (और अधिक पठनीय) होता है। तो नए स्ट्रिंगबिल्डर (एक्स) में "एक्स + वाई + जेड" को प्राथमिकता दें .एपीएंड (वाई) .एपेंड (जेड)। टॉस्ट्रिंग()। स्ट्रिंगबिल्डर उपयोगी होता है जब * दोहराया * concatenations हैं। –

+0

दूसरे जॉन के बिंदु पर ... स्ट्रिंगबिल्डर उपयोगी है जब लूपिंग इत्यादि। संचालन के एक सेट के लिए, स्ट्रिंग। कॉनकैट सरल है और वही काम करता है। –

+0

धन्यवाद मार्क - मैं अंतरिक्ष से बाहर चला गया :) मेरे स्ट्रिंगबिल्डर लेख को इंगित करने के लिए मेरा जवाब संपादित किया गया ... –

37

है। यदि आप उदाहरण के लिए अपने कोड में एक प्रश्न है तो यह उपयोगी है:

string query = @"SELECT whatever 
FROM tableName 
WHERE column = 1"; 

यह आपको लाइन टूट जाता है और टैब के साथ एक स्ट्रिंग दे देंगे, लेकिन एक प्रश्न के लिए कोई फर्क नहीं पड़ता कि।

1

स्ट्रिंगबिल्डर पर जाने का एक अच्छा तरीका है यदि आपके पास कई (लगभग चार से अधिक) स्ट्रिंग्स को जोड़ने के लिए हैं। यह तेज है।

ऊपर आप उदाहरण में String.Concat का प्रयोग संकलन समय पर किया जाता है। क्योंकि वे शाब्दिक तार वे संकलक द्वारा अनुकूलित किए गए हैं।

चर आप फिर भी उपयोग करते हैं:

string a = "string1"; 
string b = "string2"; 
string c = a + b; 

इस क्रम में किया जाता है।

+0

"4 से अधिक" डेटा के सेट पर लूप करते समय केवल प्रासंगिक है; अन्यथा, स्ट्रिंग करने के लिए एक कॉल। कॉनकैट (यदि आवश्यक हो तो सरणी पास करना) समान है। –

+0

आप जो कह रहे हैं वह सच है। http://dotnetperls.com/Content/StringBuilder-Performance.aspx –

-3

StringBuilder अपने सबसे तेजी से दृष्टिकोण आप तार के किसी भी राशि का उपयोग कर रहे है, तो हो जाएगा।

http://dotnetperls.com/Content/StringBuilder-1.aspx

आप बस कुछ स्ट्रिंग कर रहे हैं गति संयोजन आप किस तरह के प्रयोग कर रहे हैं की बात नहीं होगी (5 या उससे कम एक अच्छा नियम है)।

+0

स्ट्रिंग बिल्डर तेज * रनटाइम * समाधान है, लेकिन दी गई अभिव्यक्ति का संकलन समय पर बेहतर मूल्यांकन किया जाएगा (जो मुझे लगता है कि यह समस्या नहीं होनी चाहिए संकलक) – peterchen

0

ऐसा करने का कोई तरीका है। मेरा फेवरेट सी # से स्ट्रिंग की विधि का उपयोग करता है। नमूना वन:

स्ट्रिंग एस = स्ट्रिंग.फॉर्मैट ("{0} {1} {0}", "हैलो", "बाय"); परिणाम एस = "हैलो द्वारा हैलो";

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