کلاس StringBuillder چیست؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

کلاس StringBuillder چیست؟

+3 امتیاز
با سلام کلاس StringBuillder  برای چی استفاده میشه؟ لطفا مثال هم بزنید. ممنون.
سوال شده اسفند 29, 1392  بوسیله ی daniyaltjm (امتیاز 840)   47 88 103

1 پاسخ

+6 امتیاز
 
بهترین پاسخ

سلام.

این کلاس برای استفاده بهینه از عبارات رشته ای که قراره مرتبا دستخوش تغییر یا مورد استفاده قرار بگیرن طراحی شده.

در حالت عادی که یک متغیر از کلاس 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 یه سری خصوصیات خاص خودش رو هم داره که در صورت تمایل می تونید از این امکانات استفاده کنید. از جمله تعیین حداکثر تعداد کاراکترهای دریافتی، درج عبارت جدید در مکان خاصی از رشته فعلی و ...

پاسخ داده شده فروردین 1, 1393 بوسیله ی veniz2008 (امتیاز 2,083)   1 5 21
انتخاب شد فروردین 1, 1393 بوسیله ی daniyaltjm
ممنون , چندتا از متد های مهمش رو هم میگین مثل همین Append?
یه متد دیگه AppendFormat هست که با یک فرمت خاص، اطلاعات رو اضافه میکنه.
متد بعدی متد AppendLine هست که اگر بدون ورودی (فقط پرانتز باز و بسته) استفاده کنید، همون enter رو بعنوان پایان سطر جاری در نظر میگیره و ادامه رشته رو در سطر بعدی چاپ میکنه و اگر یه کاراکتر خاص درون پرانتز بهش بدید، این کاراکتر رو به آخر رشته اضافه میکنه و بعد ادامه رشته رو در سطر بعدی چاپ میکنه. با یه تست ساده کامل متوجه منظورم خواهید شد.
متد Insert هست که overload های زیادی داره که یکیش دو پارامتر بهش میدید، اولی شماره اندیسی هست که میخواید متن جدید از اون قسمت به رشته قبلیتون اضافه بشه و دومی هم متن جدیدی هست که میخواید اضافش کنید.
متد دیگه Remove هست که دو پارامتر از شما میگیره. اولیش اندیس شروع برای حذف رشته، و دومی تعداد کاراکترهایی هست که میخواید حذف بشه.
همچنین متد Replace رو دارید که میتونید یه متن جدید رو با بخشی از متن جاری، جایگزین کنید.
و چندین متد دیگه.
موفق باشید.
سلام
ببخشید اگه تویه یه متد بخوایم یه متغیر استرینگ رو به تعداد زیاد مقدارشو عوض کنیم مثلا هزار بار(متنی رو بهش اضافه نکنیم فقط هر بار به کل مقدارشو عوضش کنیم) همون استرینگ کافیه یا از استرینگ بیلدر استفاده کنیم ؟
...