खोज…


StringBuilder क्या है और कब एक का उपयोग करना है

एक StringBuilder वर्णों की एक श्रृंखला है, जो एक सामान्य स्ट्रिंग के विपरीत, परिवर्तनशील हैं प्रतिनिधित्व करता है। अक्सर कई बार हम पहले से किए गए तारों को संशोधित करने की आवश्यकता होती है, लेकिन मानक स्ट्रिंग ऑब्जेक्ट परस्पर नहीं है। इसका मतलब यह है कि हर बार एक स्ट्रिंग को संशोधित किया जाता है, एक नई स्ट्रिंग ऑब्जेक्ट को बनाने, कॉपी करने और फिर पुन: असाइन करने की आवश्यकता होती है।

string myString = "Apples";
mystring += " are my favorite fruit";

उपरोक्त उदाहरण में, myString शुरू में केवल "Apples" का मूल्य है। हालांकि, जब हम `'मेरा पसंदीदा फल हैं' ', तो स्ट्रिंग वर्ग को आंतरिक रूप से क्या करने की आवश्यकता है:

  • myString की लंबाई और हमारे द्वारा जोड़े जा रहे नए स्ट्रिंग के बराबर वर्णों का एक नया सरणी बनाना।
  • के पात्रों के सभी प्रतिलिपि बनाई जा रही myString हमारी नई सरणी की शुरुआत में और सरणी के अंत में नए स्ट्रिंग को कॉपी।
  • स्मृति में एक नई स्ट्रिंग ऑब्जेक्ट बनाएं और इसे myString को पुन: असाइन करें।

एकल संयोजन के लिए, यह अपेक्षाकृत तुच्छ है। हालांकि, क्या होगा यदि कई एपेंड ऑपरेशन करने की आवश्यकता है, कहो, एक लूप में?

String myString = "";
for (int i = 0; i < 10000; i++)
    myString += " "; // puts 10,000 spaces into our string

बार-बार नकल और वस्तु निर्माण के कारण, यह हमारे कार्यक्रम के प्रदर्शन में काफी गिरावट लाएगा। हम इसके बजाय एक StringBuilder का उपयोग करके इससे बच सकते हैं।

StringBuilder myStringBuilder = new StringBuilder();    
for (int i = 0; i < 10000; i++)
    myStringBuilder.Append(' ');

अब जब समान लूप चलाया जाता है, तो प्रोग्राम के निष्पादन समय का प्रदर्शन और गति सामान्य स्ट्रिंग का उपयोग करने की तुलना में काफी तेज होगी। StringBuilder को एक सामान्य स्ट्रिंग में वापस लाने के लिए, हम बस StringBuilder की ToString() विधि कह सकते हैं।


हालाँकि, यह एकमात्र अनुकूलन नहीं है StringBuilder है। कार्यों को और अधिक अनुकूलित करने के लिए, हम अन्य गुणों का लाभ उठा सकते हैं जो प्रदर्शन को बेहतर बनाने में मदद करते हैं।

StringBuilder sb = new StringBuilder(10000); // initializes the capacity to 10000

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

sb.Append('k', 2000);

हालांकि का उपयोग कर StringBuilder जोड़कर लिए बहुत तेजी से एक तार से है, यह भी तेजी से करता है, तो आप केवल एक ही चरित्र कई बार जोड़ने की जरूरत चला सकते हैं।

एक बार जब आप अपने स्ट्रिंग निर्माण पूरा कर लिया है, तो आप उपयोग कर सकते हैं ToString() पर विधि StringBuilder यह एक बुनियादी कन्वर्ट करने के लिए string । यह अक्सर आवश्यक होता है क्योंकि string से StringBuilder वर्ग विरासत में नहीं मिलता है।

उदाहरण के लिए, आप निम्न तरीके से एक का उपयोग कर सकते है StringBuilder एक बनाने के लिए string :

string RepeatCharacterTimes(char character, int times)
{
    StringBuilder builder = new StringBuilder("");
    for (int counter = 0; counter < times; counter++)
    {
        //Append one instance of the character to the StringBuilder.
        builder.Append(character);
    }
    //Convert the result to string and return it.
    return builder.ToString();
}

अंत में, StringBuilder स्ट्रिंग के स्थान पर इस्तेमाल किया जाना चाहिए जब एक स्ट्रिंग की जरूरत के लिए कई संशोधनों को ध्यान में प्रदर्शन के साथ किए जाने के लिए।

बड़ी संख्या में रिकॉर्ड से स्ट्रिंग बनाने के लिए StringBuilder का उपयोग करें

public string GetCustomerNamesCsv()
{
    List<CustomerData> customerDataRecords = GetCustomerData(); // Returns a large number of records, say, 10000+

    StringBuilder customerNamesCsv = new StringBuilder();
    foreach (CustomerData record in customerDataRecords)
    {
       customerNamesCsv
           .Append(record.LastName)
           .Append(',')
           .Append(record.FirstName)
           .Append(Environment.NewLine);
    }

    return customerNamesCsv.ToString();
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow