چرا و کی باید از کلاس 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.
}
مدیر تالار های: