سلام.
این کلاس برای استفاده بهینه از عبارات رشته ای که قراره مرتبا دستخوش تغییر یا مورد استفاده قرار بگیرن طراحی شده.
در حالت عادی که یک متغیر از کلاس string تعریف می کنیم، هر بار که یک متد بر روی این متغیر اعمال میکنیم در حافظه یک شی جدید برای این کار ساخته میشه. این بخاطر این هست که کلاس string بصورت Immutable (تغییر ناپذیر) هستش. به همین خاطر فرضا زمانیکه از متد substring بر روی یک متغیر string استفاده می کنیم و میخوایم که مثلا 3 کاراکتر اولش رو برگردونیم، یک شی جدید در حافظه برای این کار ساخته میشه.
اما کلاس StringBuilder یک کلاس Mutable (تغییر پذیر) هستش و زمانیکه قصد ایجاد تغییرات یا هر نوع کاری رو بر روی رشته مورد نظر دارید، از همون شی اولیه استفاده میکنه و شی جدیدی در حافظه ایجاد نمیشه.
این کلاس رو می تونید زمانی استفاده کنید که قصد تغییر روی یک رشته رو دارید بدون اینکه شی جدیدی در حافظه ساخته بشه.
در مقیاس کوچیک، تفاوتی رو در عمل نمی بینیم ولی کافیه تعداد تکرار روی عبارت رشته ای زیاد بشه اونوقت تفاوت بسیار محسوس میشه.
در کد زیر به دو روش مختلف یه حلقه تکرار با 60 هزار بار تکرار رو خواهیم داشت که در هر مرحله عبارت "salam" رو به رشته مورد نظر اضافه میکنیم.
کد رو در سیستم خودتون تست کنید تا زمان انجام عمل یکسان با دو روش متفاوت رو مشاهده کنید :
استفاده از stringbuilder :
private void BtnTest_Click(object sender, EventArgs e)
{
DateTime StartTime = DateTime.Now;
StringBuilder strb = new StringBuilder();
for (int i = 1; i <= 60000; i++)
{
strb.Append("salam");
}
MessageBox.Show((DateTime.Now - StartTime).ToString());
MessageBox.Show(strb.Length.ToString());
}
حالا از یه متغیر رشته ای استفاده میکنیم :
private void BtnTest_Click(object sender, EventArgs e)
{
DateTime StartTime = DateTime.Now;
string a = "";
for (int i = 1; i <= 60000; i++)
{
a += "salam";
}
MessageBox.Show((DateTime.Now - StartTime).ToString());
MessageBox.Show(a.Length.ToString());
}
اینم اضافه کنم که کلاس strinbuilder یه سری خصوصیات خاص خودش رو هم داره که در صورت تمایل می تونید از این امکانات استفاده کنید. از جمله تعیین حداکثر تعداد کاراکترهای دریافتی، درج عبارت جدید در مکان خاصی از رشته فعلی و ...