0

هزاران نکته در سی شارپ

 
hosseinb68
hosseinb68
کاربر طلایی1
تاریخ عضویت : بهمن 1389 
تعداد پست ها : 1269
محل سکونت : بوشهر

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

 

تشکرات از این پست
DR460N ravabet_rasekhoon unknown hamidreza52 re_at80
دسترسی سریع به انجمن ها