چرا و کی باید از کلاس StringBuilder به جای string استفاده کرد
سه شنبه 7 آذر 1391 8:11 AM
آبجکتهای string در دات نت immutable (غیرقابل تغییر) هستند :به این معنا که پس از مقدار گرفتن، دیگر قابل تغییر نیستند.
به مثال زیر دقت کنید :
1.string temp = "a";2.temp = temp + "b";3.temp += "c";4.temp += "d";
در این مثال ابتدا یک آبجکت از نوع string میسازید، اما در خطوط بعدی با هر بار تغییر مقدار آن؛ آبجکتهای قدیمی فراموش و یک آبجکت جدید از نوع string - با مقدار جدید - ساخته میشود.
به این ترتیب میشه انتظار داشت که کد زیر چه سربار وحشتناکی روی منابع سیستم میتونه داشته باشه :
1.string s2 = new String('x', Int32.Parse(args[0]));2.int loops = Int32.Parse(args[1]);3. 4.for (int j = 0; j < 10000000; j++) {5. string s = "";6. for (int i = loops; i > 0; --i)7. s += s2;8.}
بصورت کلی در حالتیکه اعمال تغییرات زیاد روی رشته ها نیاز باشد بهتر است آبجکتی از کلاس StringBuilder ساخته و با خاصیت Append آن کار کنیم.
مثال - پیاده سازی همان کد قبلی :
01.string s2 = new String('x', Int32.Parse(args[0]));02.int loops = Int32.Parse(args[1]);03. 04.for (int j = 0; j < 10000000; j++) {05. StringBuilder sb = new StringBuilder();06. for (int i = loops; i > 0; --i)07. sb.Append(s2);08. sb.ToString();09.}
مدیر تالار های: