نمایش نتایج 1 تا 1 از 1

نام تاپیک: StringBuilder چابکترین اما نه همیشه؟

  1. #1
    کاربر دائمی آواتار #aliyari_C
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    همین نزدیکی
    پست
    200

    تفاوت میان String و StringBuilder?

    مقدمه:
    با عرض سلام و خدا قوت خدمت تمام برو بچ برنامه نویس , از آنجایی که سوالهای بساری در مورد کاربرد StringBuilder و نیز تفاوت آن با String همیشه مطرح می شود, من به دنبال مقاله در این باره می گشتم که جز تایپیکهای سوالی و بحث برانگیز به نتیجه ای کامل نرسیدم ,اما تایپیکی را در سایت CodeProject دیدم که مقوله ای کامل از مقایسه String و StringBuilder به طور کامل ارائه داد بود.
    البته بنده آن چیزی را که در مقاله ایشان بود زیاد متوجه نشدم(شاید به دلیل حرفه ای بودنش) و از همین رو دست به تغییر و دستکاری هم در نمونه برنامه آقایAlois Kraus نمودم تا آن را به زبانی ساده تر بیان کنم.
    منبع اصلی:http://www.codeproject.com/KB/cs/Str...vs_String.aspx



    انجام آزمایش:
    در این مقاله به مقایسه دو کلاس StringBuilder و String پرداخته شده که متدها و خاصیتهای مشابه شان را مورد مقایسه قرار داد ام.
    این آزمایش با سیستمی با مشخصات زیر انجام شده:
    1.با .NET 3.5
    2.intel Pentium® 3.0 GHz * 2
    3.MB Ram 512
    نکته: البته برای اینکه برنامه را در سیستم خودم اجرا کنم , سیستم عامل آنرا به حالت SafeMode بورده ام.تا فقط برنامه خودم با CPU فعل و انفعال داشته باشد (برنامه های آنتی ویروس و... غیرفعال شوند)
    نکته:البته در حالت SafeMode برنامه اجرایش نسبت به حالت Normal Windows بیشتر طول می کشد.
    خوب برای شروع ما رشته به نام "The quick brown fox jumps over the lazy dog" داریم که قرار است تا آخر داستان با این رشته سرو کله بزنیم.
    اولین آزمایش مربوط به مقایسه رشته ها بین دو تابع string.compareو string.copareordinal می باشد
    نتـــایـــــج:
    که هر حلقه طبق فرمول (تعداد * 1000000 ) اجرا می شود و زمان هم همان ثانیه است.

    مثلا تعداد 150 بار یعنی:
    Stopper.Iterations = 150000000;


    آزمایش دوم مربوط به مقایسه دو تابع String.Remove و String.RemoveBuilder
    نتـــایـــــج:
    در مرحله ما فقط با یک بار حلقه 5000000 را اجرا می کنیم ولی در Remove کردن کاراکترها را افزایش داده ایم.
    مثلا تعداد 15 کاراکتر یعنی

    Stopper.Iterations = 5000000;
    Stopper.RemoveCount = 15;
    Stopper.CheckRemove("String.Remove 15 char", StringRemove);
    Stopper.CheckRemove("StringBuilder.Remove 15 char", StringBuilderRemove);




    آزمایش سوم مربوط به مقایسه دو تابع String.Insert و StringBuilder.Insert می باشد.
    نتـــایـــــج:
    در این مرحله نیز مانند مرحله قبل با یک بار حلقه 5000000 اجرا می کنیم ولی در Insert کردن 3کاراکتر بالا می رویم
    مثلا تعداد 7 کاراکتر یعنی:

    Stopper.Iterations = 5000000;
    Stopper.StringInserts = new string[7] { "brown ", "quick ", "The ", "brown ", "quick ", "brown ", "quick " };
    Stopper.CheckInsert("String.Insert The, quick, brown (7)", StringInsert);
    Stopper.CheckInsert("StringBuilder.Insert The, quick, brown (7)", StringBuilderInsert);



    </div> آزمایش سوم مربوط به مقایسه دوتابع String.Replace وStringBuilder.Replace می باشد
    نتـــایـــــج:


    در این مرحله قرار است واژه ای را با واژه ای دیگر جاگزین کنیم , البته در رفتن به مرحله بعد واژهای مرحله قبل هم به اضافه واژه همان مرحله جایگزین می شود

    مثلا در مرحله یک واژه slow جایگزین واژه quick می شود در مرحله دو هم واژه slow جایگزین واژه quick می شود و هم واژه busy جایگزین lazy می شود.


    آزمایش چهارم مربوط به مقایسه دو تابع String.Format و StringBuilder.Format</div>
    نتـــایـــــج:
    و در این مرحله ساده ترین نوع Format رشته ای را انجام می دهیم و قصد پیچیده سازی نداریم و نیز یا یک حلقه 500000 اجرا ولی هر مرحله فراخوانی تابع StringFormat و StringBuilderFormat را افزایش می دهیم

    دراینجا ما دو واژه First و Second را داریم که قرار است با فرمت بندی آن را داخل جمله مورد نظر بگذاریم.

    object[] str=new object[2]{ "First", "Second" };
    string.Format("Formatting {0} and {1} into string", str);


    یعنی First جای خانه 0 و Second جای خانه 1 می نشیند.


    آزمایش پنجم مربوط به مقایسه "+" (روش سنتی) ,Join,Concat,StringBuilder.Append
    نتـــایـــــج:
    در اینجا ما یک حلقه 50000000 اجرا داریم که دراین مرحله ما آرایه داریم که قرار است در رشته مورد نظر اضافه کنیم . به طور معمول از روش “+” در String استفاده می شود ولی می توان از دو تابع دیگر Concat و Join برای الصاق رشته استفاده نمود
    در این مرحله ما با افزایش آرایه خود کارایی آنها را آنالیز می کنیم.
    نکته:هردو تابع زیر نتایج یکسانی را بر می گردانند.(string یک آرایه است).

    String.Join(String.Empty, strings);
    String.Concat(strings);


    </div></div>
    این هم برنامه اش (برنامه اصلی در سایت CodeProject می باشد)
    http://www.barnamenevis.org/do...82811&act=down
    " target="_blank" title="برای دانلود اینجا را کلیک کنید">برای دانلود اینجا را کلیک کنید

    __________________________________________________ ___________________

    چون به دریا می توانی راه یافت
    سوی یک قطره چرا باید شتافـت

    آخرین ویرایش به وسیله #aliyari_C : پنج شنبه 24 تیر 1389 در 11:01 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •