PDA

View Full Version : سوال: تعريف متغيير درون يا برون حلقه



iran400
دوشنبه 24 اسفند 1388, 03:27 صبح
سلام عليكم
يك حلقه داريم كه مثلا 100000 بار تكرار مي شود

به خود برنامه كار ندارم منظورم متغير a مي باشد.
اگر در بيرون حلقه ساخته شود بهينه تر مي باشد يا در داخل حلقه؟




StringBuilder sb = new StringBuilder();
string a=""
for (int i=0;i<10000;i++)
{
if (.....)
a = test1();
else
a = test2();
sb.Append(a)
}

-------------------------------------------------------


StringBuilder sb = new StringBuilder();
for (int i=0;i<10000;i++)
{
string a=""
if (.....)
a = test1();
else
a = test2();
sb.Append(a)
}

با تشكر

FastCode
دوشنبه 24 اسفند 1388, 06:47 صبح
در کد IL تاثیری نداره.
در هر دو صورت متغیر بیرون حلقه تعریف میشه.(طرزکار virtualalloc رو حتما" یاد بگیرید. بعدا" هم خیلی کمکتون میکنه.)

HOSSEINGHOLI
دوشنبه 24 اسفند 1388, 12:41 عصر
از نظر سرعت فرقی نداره ولی از نظر سطح دسترسی تفاوت میکنه

iran400
یک شنبه 15 فروردین 1389, 18:55 عصر
سلام
ببخشيد يك مدت نبودم
ممنون كه راهنمائي فرموديد.

mahmoodramzani
یک شنبه 15 فروردین 1389, 20:09 عصر
باید بگم در هر صورت با هر بار اجرای حلقه یک string جدید ساخته می شه.
پس فرقی نمی کنه که داخل حلقه باشه یا خارج.
اما چرا هر بار یک string جدید ساخته می شه؟
چون string از نوع Immutable هست،پس هر نوع تغییر در اون متغیر موجب ایجاد یک string جدید می شه.
فرق string و stringbuilder هم در همین هست.یعنی string به صورت Immutable هست و stringbuilder از نوع Mutable

javanerd
یک شنبه 15 فروردین 1389, 20:55 عصر
من به صورت کلی به چند نکته در مورد نوشتن کدهای بهینه اشاره می‌کنم.



کامپایلرهای امروزی بسیار هوشمندتر از آن چیزی هستند که شما بتوانید تصور کنید. پس به جای اینکه به فکر نوشتن کدهای بهینه باشید، فقط به این موضوع فکر کنید که کدهایی بنویسید که نوشتن و فهم آنها ساده باشد. کار بهینه‌سازی را به کامپایلرها واگذار کنید.
اگر کد شما کند اجرا می‌شود (باید اندازه‌گیری کنید، نه اینکه فقط حدس بزنید یا احساس کنید)، به جای بهینه کردن کد به صورت دستی از یک کامپایلر بهتر یا از یک ابزار که کد را به صورت اتوماتیک تحلیل می‌کند و بهینه‌سازی‌های پیشرفته تر را انجام می‌دهد استفاده کنید.
اگر بازهم کد شما کند اجرا می‌شود (پس از مطمئن شدن از طریق اندازه‌گیری)، قبل از شروع به بهینه‌سازی باید بخشی از کد که کند اجرا می‌شود را پیدا کنید. قانون ۲۰-۸۰ اینجا هم صادق است (۲۰ درصد کد ۸۰ درصد از زمان اجرا را به خود اختصاص می‌دهد و ۸۰ درصد از کد فقط ۲۰ درصد از اجرا را بر عهده دارد).
اگر مطمئن شدید که کد شما کند اجرا می‌شود و بخشی از کد که باعث کند شدن کد می‌شود را پیدا کردید، قبل از اینکه به بهینه‌سازی‌های دستی مانند در کد آنچه شما به آن اشاره کردید بپردازید، به استفاده از الگوریتم‌ها و ساختمان داده‌های سریع‌تر فکر کنید. استفاده از یک الگوریتم یا ساختمان داده سریع‌تر می‌تواند زمان اجرای کد را زیر و رو کند، به خصوص وقتی که تعداد داده‌ها زیاد باشد.
اگر تمام مراحل فوق را انجام دادید. حتما پس از بهینه‌سازی دستی کد دوباره کارآیی کد را اندازه‌گیری کنید و در صورتی متوجه شدید که بهبودی حاصل نشده است حتما کد را به حالت قبل برگردایند.