क्या बीच का अंतर है:स्ट्रिंग.कोनकैट, string.format और + के बीच क्या अंतर है?
String.Concat
,String.Format
,+
ऑपरेटर।
जो प्रत्येक शर्त में अधिक कुशल या लंबी स्ट्रिंग concatenation है, जो एक अधिक कुशल है।
क्या बीच का अंतर है:स्ट्रिंग.कोनकैट, string.format और + के बीच क्या अंतर है?
String.Concat
,String.Format
,+
ऑपरेटर।जो प्रत्येक शर्त में अधिक कुशल या लंबी स्ट्रिंग concatenation है, जो एक अधिक कुशल है।
string.Concat
बस एक साथ तारों को जोड़ता है। यह ToString
बुला से परे कोई रूपांतरण प्रदान करता है, कोई स्वरूपण आदि
string.Format
एक अधिक बेहतर है, जिससे प्रारूप पैटर्न आदि है
जब आप सी # स्रोत कोड में +
ऑपरेटर का उपयोग, संकलक धर्मान्तरित कि String.Concat
के लिए कॉल में - यह decimal
में कहने के तरीके में निष्पादन समय ऑपरेटर नहीं है।
तो यह:
string result = x + y + z;
इस में संकलित किया गया है:
string result = string.Concat(x, y, z);
दक्षता के मामले में, स्पष्ट रूप से string.Concat
करने के लिए कॉल और +
का उपयोग कर बराबर हो सकता है। मैं आम तौर पर string.Format
से तेज़ होने की अपेक्षा करता हूं लेकिन अधिकांश मामलों में अंतर में नगण्य होगा। आपको सबसे स्पष्ट, सबसे रखरखाव कोड लिखना चाहिए (जिसे अक्सर string.Format
का उपयोग करना है) और फिर माइक्रो-ऑप्टिमाइज़ केवल तभी होता है जब आपके पास परीक्षण डेटा है, यह दिखाने के लिए कि को उस विशेष टुकड़े को अनुकूलित करने के लिए की आवश्यकता है, और फिर केवल एक बार अनुकूलन बनाए रखें आपने साबित कर दिया है कि यह मदद करता है।
एक ऐसा क्षेत्र है जहां अनुकूलन का एक सा कर सकते हैं एक बहुत बड़ा अंतर है संयोजन दोहराया है, आमतौर पर एक पाश में ध्यान दें कि। यह कोड बेहद अक्षम है:
string result = "";
foreach (var x in y)
{
// Do some processing...
string z = ...;
result += z;
}
यह प्रत्येक पुनरावृत्ति पर एक मध्यवर्ती स्ट्रिंग की प्रतिलिपि बनाने के लिए समाप्त होता है। इन परिस्थितियों में, या तोStringBuilder
का उपयोग करें, या उन सामग्रियों का प्रतिनिधित्व करने के लिए LINQ क्वेरी का उपयोग करें जिन्हें आप समापन करने की आवश्यकता होगी और फिर string.Join
या string.Concat
को संगतता निष्पादित करने के लिए।
बहुत अच्छा जवाब! +1 – theknut
यह संभवतः यह इंगित करने लायक है कि प्रदर्शन अंतर (यद्यपि संभवतः नगण्य, जैसा कि जॉन इंगित करता है) क्योंकि हुड के तहत, 'स्ट्रिंग.फॉर्मैट' काम करने के लिए 'स्ट्रिंगबिल्डर' को तत्काल बनाता है, जबकि 'स्ट्रिंग.कोनकैट' (और '+', संभवतः, फिर) स्मृति में 'असुरक्षित' स्ट्रिंग मैनिपुलेशन का उपयोग करता है। –
@ ओवेनब्लैकर: मैं इसे इसलिए नहीं मानना चाहता हूं। मूल रूप से यह और अधिक काम कर रहा है - इसे एक चीज़ के लिए प्रारूप स्ट्रिंग को पार्स करना होगा। –