بایگانی

Posts Tagged ‘StringBuilder’

تفاوت الحاق توسط StringBuilder و string در Performance

مارس 17, 2010 3 دیدگاه

چند وقت پیش مطلبی رو جایی دیدم که به نظرم جالب بود.ولی اون موقع وقت نداشتم برم دنبالش.مطلب در مورد استفاده از StringBuilder بود و استفاده از اون به جای string در concatenate.

اکثر برنامه نویسان وقتی میخواهند دو رشته را به هم بچسبانند از عملگر + استفاده میکنندو به این ترتیب دو رشته باهمدیگر ترکیب خواهند شد.برای concatenate دو روش خواهیم داشت.یکی استفاده از همین عملگر + که برای الحاق دو رشته از نوع string مورد استفاده قرار میگیره و یکی هم استفاده از StringBuilder.

تفاوت استفاده از این دو روش فقط در Performance هست و هر دو روش نتیجه یکسانی رو به ما خواهد داد.

اما چه اتفاقی میافته وقتی که ما  از روش زیر برای concatenate استفاده میکنیم.

Str1 += str2;

در این مورد استفاده با وجود اینکه ما دو نوع داریم ولی 3 نمونه در حافظه خواهیم داشت.اما دلیل :

در .Net آبجکت های string تغییرناپذیر هستن.یعنی وقتی به وجود میان مقدار اونها قابل تغییر نخواهد بود.به همین دلیل هست که وقتی مقدار str1 با str2 الحاق میشه در حقیقت str1 قبلی دور ریخته میشه و یک نمونه (instance) جدید از اون ساخته میشه که مقدار حاصل از concatenate را خواهد داشت.یعنی با این تعاریف 3 نمونه str1 قبلی، str1 جدید و یک نمونه هم از str2 که قبلا وجود داشته و تغییری نکرده است را خواهیم داشت.

حالا تصور کنید ما بخواهیم این عمل رو چندین بار با یک نمونه انجام بدیم که این کار باعث به وجود آمدن instance های اضافی در حافظه خواهد شد.

حالا ببینیم StringBuilder چگونه کار میکنه؟!

StringBuilder sb = new StringBuilder();

Sb.Append(str2);

StringBuilder برخلاف string تغییرپذیر است.به همین دلیل شما فقط یک نمونه از این کلاس خواهید داشت و وقتی یک رشته جدید رو به اون می چسبونید نمونه دیگری از اون ایجاد نخواهد شد و رشته جدید به نمونه موجود از StringBuilder اضافه خواهد شد.

طبیعتا استفاده از StringBuilder به صرفه تر و سریعتر خواهد بود.


Vote on iDevCenter

Advertisements
دسته‌ها:C#.Net, Performance برچسب‌ها: , , ,