تفاوت String و StringBuilder در سی شارپ — همراه با مثال های کاربردی

تصویر شاخص تفاوت String و StringBuilder در سی شارپ

در این مقاله، از سری مقالات آموزشی پی استور، به تفاوت String و StringBuilder در سی شارپ #C، موارد استفاده مناسب آن‌ها و ارائه مثال‌هایی برای توضیح نحوه استفاده از آن‌ها می‌پردازیم.

مقدمه

در زبان برنامه‌نویسی سی‌شارپ، رشته‌ها یکی از پرکاربردترین نوع داده‌ها هستند. NET framework. دو کلاس اصلی برای کار با رشته‌ها ارائه می‌دهد: string و StringBuilder. اگرچه هر دو برای مدیریت داده‌های متنی استفاده می‌شوند، اما ویژگی‌ها و تأثیرات عملکردی متفاوتی دارند.

String یک نوع داده غیرقابل تغییر «Immutable» است، به این معنا که هرگونه تغییر در مقدار آن منجر به ایجاد یک شیء جدید می‌شود. این ویژگی باعث می‌شود عملیات‌های مکرر بر روی رشته‌ها هزینه‌بر باشد، زیرا برای هر تغییر حافظه جدیدی تخصیص می‌یابد.
از سوی دیگر، StringBuilder یک نوع داده قابل تغییر «Mutable» است که به کاربر اجازه می‌دهد بدون ایجاد شیء جدید، رشته‌ها را تغییر دهد. این ویژگی آن را برای عملیات‌های مکرر و سنگین بر روی رشته‌ها به گزینه‌ای بهینه‌تر تبدیل می‌کند.

برای مطالعه بیشتر در مورد StringBuilder . مقاله ما با موضوع کلاس StringBuilder در سی شارپ را مطالعه کنید.

تصویری از مفهوم StringBuilder

تمام عملکردهای StringBuilder توسط کلاس StringBuilder که در فضای نام System.Text قرار دارد، ارائه می‌شود. انتخاب بین String و StringBuilder به عوامل مختلفی از جمله حجم داده‌ها، تعداد تغییرات و اهمیت عملکرد بستگی دارد.

String در مقابل StringBuilder در سی شارپ

در سی‌شارپ، String و StringBuilder هر دو برای کار با رشته‌ها استفاده می‌شوند، اما تفاوت‌های مهمی بین آنها وجود دارد که عملکرد و کارایی کد را تحت تأثیر قرار می‌دهد.

اگر نیاز به تغییرات مکرر در رشته‌ها دارید، استفاده از StringBuilder به دلیل کارایی بهتر توصیه می‌شود. در غیر این صورت، اگر رشته‌ها ثابت یا کمی تغییر می‌کنند، String می‌تواند انتخاب ساده‌تری باشد.

ویژگی String StringBuilder
تغییرپذیری تغییرناپذیر (بعد از ایجاد قابل تغییر نیست) قابل تغییر (بدون ایجاد اشیاء جدید قابل تغییر است)
عملکرد برای تغییرات مکرر کندتر است برای تغییرات مکرر سریعتر است
استفاده از حافظه برای هر تغییر یک شی جدید ایجاد می کند همان شی را تغییر می دهد و سربار حافظه را کاهش می دهد
استفاده از مورد برای رشته های کوچک یا به ندرت اصلاح شده استفاده کنید برای رشته های بزرگ یا اغلب اصلاح شده استفاده کنید
روش های اصلاح اصلاح نیاز به ایجاد یک رشته جدید دارد اصلاح در محل انجام می شود
ایمنی موضوع رشته ها از نظر موضوع ایمن هستند StringBuilder ذاتاً ایمن نیست

مثال نشان دادن تفاوت String و StringBuilder در سی شارپ

قطعه کد زیر نشان می‌دهد که چگونه عملکرد String و StringBuilder در سی‌شارپ در عملیات الحاق رشته‌ها متفاوت است.

// Difference between String Vs StringBuilder 
using System; 
using System.Text; 
using System.Collections; 

class PStore
{ 
    // Concatenates to String 
    public static void concat1(String s1) 
    { 

        // taking a string which 
        // is to be Concatenate 
        String st = "Store"; 

        // using String.Concat method 
        // you can also replace it with 
        // s1 = s1 + "Store"; 
        s1 = String.Concat(s1, st); 
    } 

    // Concatenates to StringBuilder 
    public static void concat2(StringBuilder s2) 
    { 

        // using Append method 
        // of StringBuilder class 
        s2.Append("Store"); 
    } 

    // Main Method 
    public static void Main(String[] args) 
    { 

        String s1 = "Program"; 
        concat1(s1); // s1 is not changed 
        Console.WriteLine("Using String Class: " + s1); 

        StringBuilder s2 = new StringBuilder("Program"); 
        concat2(s2); // s2 is changed 
        Console.WriteLine("Using StringBuilder Class: " + s2); 
    } 
}

توضیحات:

  • استفاده از متد concat1: در این متد، یک رشته با مقدار Program ارسال شده و عملیات ;s1 = String.Concat(s1, st) انجام می‌شود، جایی که st مقدار Store برای الحاق شدن دارد. رشته‌ای که از متد ()Main ارسال شده است تغییر نمی‌کند، زیرا رشته در #C غیرقابل تغییر «Immutable» است. تغییر مقدار رشته منجر به ایجاد یک شیء جدید می‌شود و s1 در متد ()concat1 مرجع شیء رشته جدید را ذخیره می‌کند. اما مرجع‌های s1 در ()Main و ()concat1 به رشته‌های متفاوتی اشاره دارند.
  • استفاده از متد concat2: در این متد، یک رشته با مقدار Program ارسال شده و عملیات s2.Append(“Store”) انجام می‌شود که مقدار واقعی رشته (در Main) را به ProgramStore تغییر می‌دهد. این به دلیل این واقعیت ساده است که StringBuilder قابل تغییر «Mutable» است و بنابراین مقدار آن تغییر می‌کند.

خروجی

Using String Class: Program
Using StringBuilder Class: ProgramStore

توضیح نهایی: در مثال بالا تفاوت String و StringBuilder در سی شارپ در هنگام انجام عملیات‌های الحاق رشته‌ها «concatenation» نشان داده شده است:

  • در استفاده از String، هر بار که تغییری اعمال می‌شود، یک شیء جدید ایجاد می‌شود و متغیر اصلی تغییر نمی‌کند.
  • در استفاده از StringBuilder، تغییرات مستقیماً بر روی همان شیء اعمال می‌شوند، بدون اینکه شیء جدیدی ایجاد شود.

این کد به وضوح نشان می‌دهد که در صورت نیاز به انجام تغییرات مکرر یا پیچیده روی رشته‌ها، استفاده از StringBuilder بهینه‌تر است.

تبدیل String به StringBuilder در سی شارپ

برای تبدیل یک شیء از کلاس String به کلاس StringBuilder، کافی است شیء رشته را به سازنده کلاس StringBuilder ارسال کنید.

مثال: قطعه کد زیر نمونه‌ای از تبدیل یک شیء String به StringBuilder در زبان سی‌شارپ را نشان می‌دهد.

// Conversion from String to StringBuilder. 
using System; 
using System.Text; 

class PStore
{ 
    // Main Method 
    public static void Main(String[] args) 
    { 
        String str = "Program"; 

        // conversion from String object 
        // to StringBuilder 
        StringBuilder sbl = new StringBuilder(str); 
        sbl.Append("Store"); 
        Console.WriteLine(sbl); 
    } 
}

خروجی

ProgramStore

توضیح: مثال بالا نشان می‌دهد که چگونه می‌توان یک شیء String را به یک شیء StringBuilder تبدیل کرد. پس از تبدیل، با استفاده از متد Append، یک رشته جدید به انتهای رشته قبلی اضافه می‌شود. این مثال به وضوح نشان می‌دهد که چگونه می‌توان با استفاده از StringBuilder تغییرات مکرر و بهینه‌ای بر روی رشته‌ها انجام داد.

تبدیل StringBuilder به String در سی شارپ

این تبدیل با استفاده از متد ()ToString قابل انجام است.

مثال: قطعه کد زیر نمونه‌ای از تبدیل یک شیء StringBuilder به String در زبان سی‌شارپ را نشان می‌دهد.

// Conversion from String to StringBuilder 
using System; 
using System.Text; 

class PStore
{ 
    // Main Method 
    public static void Main(String[] args) 
    { 

        StringBuilder sbdr = new StringBuilder("Builder"); 

        // conversion from StringBuilder 
        // object to String using ToString method 
        String str1 = sbdr.ToString(); 

        Console.Write("StringBuilder object to String: "); 
        Console.WriteLine(str1); 
    } 
}

خروجی

StringBuilder object to String: Builder

توضیح: کد بالا نشان می‌دهد که چگونه می‌توان یک شیء StringBuilder را به یک String تبدیل کرد. متد ()ToString این تبدیل را انجام می‌دهد و رشته حاصل از آن در متغیر str1 ذخیره می‌شود.

زمان استفاده از String و StringBuilder

زمان استفاده از String:

  •  اگر رشته شما کوتاه و سبک باشد، استفاده از نوع string ساده و مناسب است.
  • اگر نیاز به تغییرات مکرر در محتوای رشته ندارید، string انتخاب خوبی است.
  • به مجموعه گسترده‌ای از متدهای دستکاری رشته که توسط کلاس string ارائه می‌شود، نیاز دارید.

زمان استفاده از StringBuilder:

  • برای رشته‌های طولانی که حافظه بیشتری مصرف می‌کنند، استفاده از StringBuilder عملکرد بهتری ارائه می‌دهد.
  • اگر رشته نیاز به تغییرات یا عملیات متعددی مانند الحاق، حذف، یا درج در طول زمان دارد، StringBuilder انتخاب بهتری است زیرا از ایجاد نمونه‌های متعدد جلوگیری می‌کند.
  • در مواردی که در یک حلقه باید رشته‌ها را الحاق یا ویرایش کنید، StringBuilder می‌تواند عملکرد را بهبود بخشد و از سربار ناشی از تخصیص مجدد حافظه جلوگیری کند.

نتیجه گیری

درک تفاوت String و StringBuilder در سی شارپ برای دستکاری کارآمد رشته‌ها بسیار مهم است. اگرچه هر دو ابزار برای کار با رشته‌ها استفاده می‌شوند، اما در طراحی و کاربرد تفاوت‌های اساسی دارند.

String برای مدیریت داده‌های متنی که تغییرات کمی دارند یا ثابت هستند مناسب است، زیرا ویژگی غیرقابل تغییر بودن آن امنیت و سادگی بیشتری را فراهم می‌کند. با این حال، برای عملیات‌های مکرر یا پیچیده بر روی رشته‌ها، استفاده از StringBuilder توصیه می‌شود. این ابزار به دلیل قابل تغییر بودن، کارایی بیشتری ارائه می‌دهد و از ایجاد اشیاء غیرضروری جلوگیری می‌کند.

در نهایت، انتخاب مناسب باید با توجه به نیازهای خاص پروژه و حجم عملیات‌های مرتبط با رشته‌ها انجام شود. با درک دقیق تفاوت String و StringBuilder در سی شارپ، توسعه‌دهندگان می‌توانند تصمیم‌های بهتری برای بهبود عملکرد و بهره‌وری برنامه‌های خود اتخاذ کنند.


سوالات متداول


چرا استفاده از String ممکن است در برخی مواقع غیر بهینه باشد؟

String یک نوع داده غیرقابل تغییر (immutable) است. این بدان معنی است که هر بار که شما رشته‌ای را تغییر می‌دهید، یک شیء جدید از نوع String ساخته می‌شود. این امر می‌تواند باعث ایجاد مشکلات کارایی و مصرف زیاد حافظه در عملیات‌های تکراری و سنگین شود.

چه تفاوت‌هایی بین String.Concat و StringBuilder.Append وجود دارد؟

String.Concat برای الحاق دو یا چند رشته استفاده می‌شود، اما از آنجا که String غیرقابل تغییر است، این کار باعث ایجاد یک شیء جدید و اختصاص حافظه اضافی می‌شود. StringBuilder.Append برای افزودن محتوای جدید به رشته‌ای که در حال حاضر در StringBuilder موجود است، استفاده می‌شود و هیچ شیء جدیدی ساخته نمی‌شود. این روش بهینه‌تر است، زیرا نیازی به تخصیص حافظه جدید در هر بار تغییر نیست.

آیا می‌توانم از StringBuilder برای رشته‌های کوتاه و بدون تغییر استفاده کنم؟

اگر فقط با رشته‌های کوتاه و بدون نیاز به تغییرات مکرر کار می‌کنید، استفاده از String ممکن است ساده‌تر باشد. StringBuilder بیشتر برای کاربردهایی است که تغییرات زیادی روی رشته‌ها اعمال می‌شود.

آیا StringBuilder نسبت به String سریع‌تر است؟

بله، در شرایطی که نیاز به تغییرات مکرر در محتویات رشته دارید، StringBuilder عملکرد بهتری دارد زیرا تغییرات را مستقیماً در شیء موجود انجام می‌دهد بدون اینکه حافظه جدیدی تخصیص داده شود.

آیا می‌توانم از StringBuilder برای تبدیل به String استفاده کنم؟

بله، برای تبدیل یک شیء StringBuilder به String می‌توانید از متد ToString() استفاده کنید. این متد محتوای StringBuilder را به یک شیء جدید از نوع String تبدیل می‌کند.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 5 از 7 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع و مراجع:
مجله پی استور geeksforgeeks medium

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *



برچسب‌ها:
سی شارپ


پیمایش به بالا