کلاس StringBuilder
کلاس String میتواند با استفاده از عملگر + دو رشته را به هم متصل کند. اما این عملگر برای الحاق دو رشته مختلف کارا نیست. چون شیء رشته در دات نت تغییر ناپذیر است یعنی وقتی که یک متغیر از نوع رشته را تعریف میکنیم مقدار آن تغییر نمیکند. هنگامی که یک رشته را به یک رشته موجود میچسبانید مقدار قبلی حذف و یک شیء جدید که شامل دو رشته به هم چسبیده است به وجود میآید.
مثلاً
string Animal = "Dog"; Animal = "Cat"; Console.WriteLine(Animal);
Cat
با هر بار انجام این فرایند اشیاء موقتی ایجاد و اشیاء قدیمی از بین میروند و این ایجاد و حذف شدنها هم زمان برند و هم حافظه را اشغال میکنند. به مثال زیر توجه کنید، مثلاً اگر بخواهید همه اعداد 0 تا 9999 را به هم بچسبانید :
int counter = 9999; string s = string.Empty; for (int i = 0; i <= counter; i++) { s += i.ToString(); } Console.WriteLine(s);
ممکن است با نگاه کردن به کد متوجه هیچ مشکلی نشوید اما اگر از شیء Stopwatch استفاده کنید متوجه میشوید که اجرای این برنامه چقدر زمان میبرد. کد بالا را به صورت زیر اصلاح میکنیم :
int counter = 9999; System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); string s = string.Empty; for (int i = 0; i <= counter; i++) { s += i.ToString(); } sw.Stop(); Console.WriteLine(s); Console.WriteLine("Took {0} ms", sw.ElapsedMilliseconds);
با استفاده از متد ()Start کلاس Stopwatch زمان شروع و اجرای حلقه استفاده میکنیم. بعد از پایان حلقه متد ()Stop از کلاس Stopwatch را فراخوانی میکنیم. به طور میانگین اجرای این برنامه 374 ms زمان میبرد. حال اجازه دهید که با استفاده از کلاس StringBuilder این اعداد را به هم وصل کنیم. این کار را با استفاده از متد ()Append این کلاس انجام میدهیم.
int counter = 9999; System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); StringBuilder sb = new StringBuilder(); for (int i = 0; i <= counter; i++) { sb.Append(i.ToString()); } sw.Stop(); Console.WriteLine(sb.ToString()); Console.WriteLine("Took {0} ms", sw.ElapsedMilliseconds);
مشاهده میکنید که اجرای برنامه حدود 3ms طول میکشد. همانطور که مشاهده کردید کارایی برنامه به طور چشمگیری بهبود یافت. کارایی برنامه با افزایش متغیر حلقه بیشتر میشود. کلاس StringBuilder برای کار و اتصال رشتههای زیاد به هم بسیار قدرتمند است. این کلاس دارای متدهای مختلفی است که در زیر به برخی از آنها اشاره شده است.
متد | توضیح | |
Append() | رشته معادل شیء که به عنوان آرگومان به متد ارسال میشود در انتهای نمونه قرار میدهد. | |
AppendFormat() | رشته قالب بندی شدهای به انتهای نمونه اضافه میکند. | |
AppendLine() | یک پایان دهنده خط یا یک رشته همراه با پایان دهنده خط پیشفرض به انتهای نمونه اضافه میکند. | |
CopyTo() | کاراکترهایی از قسمت خاصی از نمونه به یک آرایه کاراکتری مشخص انتقال میدهد. | |
Insert() | یک رشته را در مکان خاصی از نمونه قرار میدهد. | |
Remove() | محدودهای از کاراکترهای یک نمونه را حذف میکند. | |
Replace() | یک کاراکتر یا رشته را جایگزین تمام کاراکتر یا رشتههای خاصی از نمونه میکند. | |
ToString() | مقدار StringBuilder را به نوع String تبدیل میکند. |