सी शार्प प्रोग्रामिंग के अंतर्गत String और StringBuilder दो महत्वपूर्ण क्लासेज हैं जिनका उपयोग स्ट्रिंग के मैनिपुलेशन के लिए किया जाता है। किसी प्रोग्रामर के लिए इन दोनों के भेद को समझना अत्यंत अनिवार्य है क्योंकि किसी प्रोग्राम में स्ट्रिंग का प्रयोग बहुत ही ज्यादा किया जाता है और प्रोग्राम के भीतर स्ट्रिंग मैनिपुलेशन आम बात है।
स्ट्रिंग क्लास System नेमस्पेस के अंतर्गत आता है जबकि स्ट्रींगबिल्डर System.Text नेमस्पेस के अंतर्गत आता है।
स्ट्रिंग क्लास का उपयोग ऐसी परिस्थिति में करना चाहिए जब प्रोग्राम के भीतर स्ट्रिंग का वैल्यू आमतौर पर स्थिर हो, अचल हो अर्थात उसमें ज्यादा हेरफेर की जरूरत ना हो, इसके विपरीत स्ट्रींगबिल्डर क्लास का उपयोग तब करना चाहिए जब प्रोग्राम में स्ट्रिंग का मैनिपुलेशन बारंबार करना हो।
इसके पीछे कारण यह है कि जब स्ट्रिंग का concatenation कांक्टनेशन दूसरे स्टिंग के साथ किया जाता है तब heap के भीतर एक नया स्ट्रिंग ऑब्जेक्ट बनता है। अगर यह प्रक्रिया बार-बार दोहराई जाए तो हिप के भीतर कई सारे स्ट्रिंग ऑब्जेक्ट का निर्माण होगा। इस प्रकार heap के भीतर बहुत ज्यादा मेमोरी यूज किया जाएगा। दूसरे शब्दों में, मेमोरी के यूज के कारण प्रोग्राम की स्पीड धीमी पड़ जाएगी और प्रोग्राम की क्षमता पर बुरा प्रभाव पड़ेगा। अगर आपको अपने प्रोग्राम में स्ट्रिंग का मैनिपुलेशन बार-बार करना हो तो ऐसी स्थिति में स्ट्रींगबिल्डर क्लास का उपयोग करना चाहिए। स्ट्रींगबिल्डर क्लास की खूबी यह है कि जब स्ट्रिंग concatenation कॉन्काटेनेशन लगातार किया जाता है तो heap में स्ट्रींगबिल्डर के नये ऑब्जेक्ट नहीं बनते हैं, इसके विपरीत स्ट्रींगबिल्डर ऑब्जेक्ट की कैपेसिटी बढ़ती है, केवल उसकी मेमोरी का आवंटन परिवर्तित होता है।
स्ट्रींगबिल्डर क्लास के ऑब्जेक्ट की अपनी एक कैपेसिटी होती है। शुरू में यह कैपेसिटी १६ कैरक्टर्स की होती है। दूसरे शब्दों में, शुरू में १६ कैरेक्टर्स को एक स्ट्रींगबिल्डर ऑब्जेक्ट अपने मेमोरी में रखता है लेकिन अगर स्ट्रिंग का साइज १६ कैरक्टर्स से ज्यादा हो तो ऐसी स्थिति में स्ट्रींगबिल्डर ऑब्जेक्ट की कैपेसिटी डबल हो जाती है। कहने का अर्थ यह है कि वह १६ कैरक्टर्स से बढ़कर ३२ कैरक्टर्स की हो जाती है। जैसे-जैसे स्ट्रिंग की साइज बढ़ती है स्ट्रींगबिल्डर ऑब्जेक्ट की कैपेसिटी भी बढ़ती जाती है लेकिन heap में स्ट्रींगबिल्डर का एक ही ऑब्जेक्ट बना रहता है।
स्ट्रींगबिल्डर और स्ट्रिंग क्लास की तुलना करने पर यह पाया जाता है स्ट्रींगबिल्डर क्लास की परफॉरमेंस स्ट्रिंग क्लास की अपेक्षा बेहतर है। इस तथ्य को हम निम्नलिखित प्रोग्रामिंग कोड की सहायता से भी समझ सकते हैं।
using System;
using System.Diagnostics;
using System.Text;
namespace StringVsStringBuilder
{
class Program
{
static void Main(string[] args)
{
string str1 = "";
string str2 = "";
Stopwatch sw1 = new Stopwatch();
sw1.Start();
for (int i = 0; i < 100000; i++)
{
str1 = str1 + i;
}
sw1.Stop();
Console.WriteLine("\nElapsed watch for String : {0}", sw1.ElapsedMilliseconds);
Stopwatch sw2 = new Stopwatch();
sw2.Start();
StringBuilder sb = new StringBuilder(str2);
for (int j = 0; j < 100000; j++)
{
sb.Append(j);
}
sw2.Stop();
Console.WriteLine("Elapsed watch for StringBuilder: {0}", sw2.ElapsedMilliseconds);
Console.ReadLine();
}
}
}
© अजीत कुमार, सर्वाधिकार सुरक्षित।
इस आलेख को उद्धृत करते हुए इस लेख के लिंक का भी विवरण दें। इस आलेख को कॉपीराइट सूचना के साथ यथावत साझा करने की अनुमति है। कृपया इसे ऐसे स्थान पर साझा न करें जहाँ इसे देखने के लिए शुल्क देना पडे।
No comments:
Post a Comment