কম্পিউটার টিউটোরিয়াল

C#-তে System.String বনাম System.Text.StringBuilder — কোনটি ভালো?

মূল পার্থক্য

StringBuilder = Mutable (পরিবর্তনশীল)
String = Immutable (অপরিবর্তনশীল)

Immutable মানে কী?

string অবজেক্ট একবার তৈরি হলে তার মান পরিবর্তন করা যায় না। যেকোনো মডিফিকেশন (Concatenate, Replace, Substring) নতুন অবজেক্ট তৈরি করে মেমরিতে। পুরানো অবজেক্ট গার্বেজ কালেক্টরের জন্য ছেড়ে দেয়া হয়।

Mutable মানে কী?

StringBuilder একটি বাফার মেইনটেইন করে। Append, Insert, Replace, Remove অপারেশন এতে একই মেমরি লোকেশন-এ আপডেট হয়। নতুন অবজেক্ট তৈরি হয় না।

উদাহরণ: পারফরম্যান্স তুলনা


using System;
using System.Text;
using System.Diagnostics;

class DemoApplication {
    public static void Main() {
        const int iterations = 10000;
        
        // String - প্রতিবার নতুন অবজেক্ট
        var sw1 = Stopwatch.StartNew();
        string str = "Hello";
        for (int i = 0; i < iterations; i++) {
            str += " World"; // নতুন string অবজেক্ট
        }
        sw1.Stop();
        Console.WriteLine($"String: {sw1.ElapsedMilliseconds} ms");
        
        // StringBuilder - একই বাফার
        var sw2 = Stopwatch.StartNew();
        var sb = new StringBuilder("Hello");
        for (int i = 0; i < iterations; i++) {
            sb.Append(" World");
        }
        sw2.Stop();
        Console.WriteLine($"StringBuilder: {sw2.ElapsedMilliseconds} ms");
        
        // ফাইনাল রেজাল্ট
        Console.WriteLine($"String length: {str.Length}");
        Console.WriteLine($"StringBuilder length: {sb.Length}");
    }
}

সামान्य আউটপুট (১০,০০০ ইটারেশন):

String: 45 ms
StringBuilder: 2 ms

কেন StringBuilder দ্রুত?

  • মেমরি রি-অ্যালোকেশন ও কপি নেই
  • ইন্টারনাল বাফার ডাইনামিক্যালি বৃদ্ধি পায় (ডিফল্ট ক্যাপাসিটি ১৬, ডাবল হয়ে যায়)
  • গার্বেজ কালেক্টরের চাপ কম

কোনটি কখন ব্যবহার করবেন?

StringBuilder টিপস


// ক্যাপাসিটি প্রি-অ্যালোকেট করুন (রি-অ্যালোকেশন এড়াতে)
var sb = new StringBuilder(1000); // এক্সপেক্টেড লেঙ্গথ

// AppendFormat / AppendLine
sb.AppendLine("Line 1");
sb.AppendFormat("Value: {0}", 42);

// কlias করা
string result = sb.ToString();

// ক্লিয়ার করা (রিইউজ করতে)
sb.Clear();
sb.Length = 0; // অথবা

সারাংশ

  • String: সিম্পল, থ্রেড-সেফ, ছোট অপারেশনের জন্য
  • StringBuilder: हेवी ম্যানিপুলেশন, লুপ, পারফরম্যান্স-ক্রিটিক্যাল
  • আধুনিক C#-এ string.Create, Span, Utf8StringBuilder ও আছে 극도로 পারফরম্যান্স-ক্রিটিক্যাল কেসে
  1. Avast বনাম Malwarebytes: কোনটি ভালো?

  2. লিনাক্স মিন্ট বনাম উবুন্টু: কোনটি بہতর?

  3. ল্যাপটপ বনাম ডেস্কটপ – কোনটি ভালো?

  4. অ্যান্ড্রয়েড টিভি vs রোকু টিভি: কোন স্মার্ট টিভি প্ল্যাটফর্ম অধিক ভ্যালু দেয়?

কপিরাইট © https://bd.wsxdn.com সমস্ত অধিকার সংরক্ষিত
পরিস্থিতিসুপারিশ
কয়েকটি স্ট্রিং কনক্যাট (২-৫)string বা string.Concat / + অপারেটর
লুপে/রিকার্সিভলি বড় স্ট্রিং বিল্ডStringBuilder
ফরম্যাটিং (String.Format, Interpolation)string (রানটাইমে StringBuilder ব্যবহার করে)
থ্রেড-সেফ्टी দরকারstring (ইনমিউটেবল = থ্রেড-সেফ)
Dictionary key, HashSetstring (ইনমিউটেবল = হ্যাশ কোড স্থির)