PDA

View Full Version : for یا foreach



ali_72
شنبه 29 فروردین 1394, 10:58 صبح
سلام

خیلی از جاهای کدنویسی ما قابلیت انتخاب بین استفاده از for یا foreach را داریم

از لحاظ کارایی برنامه کدام الویت دارد؟

SabaSabouhi
شنبه 29 فروردین 1394, 11:23 صبح
سلام

خیلی از جاهای کدنویسی ما قابلیت انتخاب بین استفاده از for یا foreach را داریم

از لحاظ کارایی برنامه کدام الویت دارد؟

سلام
از نظر کارایی تفاوت مهمی ندارن. مهم خوانایی و راحتی کدنویسی و پشتیبانی هست.
شما در نظر بگیر که یه حلقه‌ی for نوشتی و در سطر اول اومدی یه متغیر گرفتی و شی مربوط به اندیس حلقه رو از مجموعه ( آرایه، کلکسیون، لیست، . . . ) گرفتی.


for( var i = 0 ; i< list.Count ; i++ ){
var item = list[i];
// . . .
}

این می‌شه همون foreach. پس اگه قراره این کار رو انجام بدی، که معمولاً تو حلقه‌ها به این کد نیاز داریم. به‌تره از foreach استفاده کنیم که ساده‌تر
و خواناتر هست.
اما یه مواقعی هست که حلقه‌ی ما به یه مجموعه وصل نیست. مثلاً می‌خواهیم برای روزهای یه ماه یه کار خواصی رو انجام بدیم.


for ( var date = beginDate ; date <= endDate ; date = date.AddDays( 1 ) ){
// . . .
}



تو این حالت دیگه جایی برای foreach وجود نداره.
یا ممکنه که تو حلقه نیازی نباشه برای کلیه عناصر مجموعه حلقه رو بگردیم، یا مثلا یکی در میون بخوایم این کار رو انجام بدیم.

خلاصه این که اگه حلقه وابسته به یه مجموعه باشه غالباً به‌تره از foreach استفاده بشه.

اضافه کنم که از وقتی Lambda یاد گرفتم، به ندرت از دستور foreach استفاده می‌کنم، و بجای اون غالباً از تابع ForEach مربوط به
لیست‌ها استفاده می‌کنم. بخصوص وقتی که بخوام شرطی رو هم روی مجموعه در نظر بگیرم.

صبا صبوحی

ali_72
شنبه 29 فروردین 1394, 11:41 صبح
صبا جان یه لینک خوب برا یادگیری
Lambda بهم معرفی میکنی؟
یا یه تیکه کد از تایعی که خودت نوشتی و به جای foreach استفاده میکنی
حالا واقعا کارایی برنامه با استفاده از روش شما افزایش پیدا میکنه؟
شاید یه سری بگن چرا من گیر دادم به این کارایی :لبخند:
برنامه آخه وقتی برنامه بزرگ میشه یک سری موارد کوچک در تعداد بالا تاثیر خودشو نشون میده

ali_72
شنبه 29 فروردین 1394, 11:53 صبح
این لینک توضیح میده که for از foreach سریعتره

http://www.c-sharpcorner.com/UploadFile/dacca2/5-tips-to-improve-performance-of-C-Sharp-code/

hamid_hr
شنبه 29 فروردین 1394, 12:07 عصر
با اجازه آقای صبا صبوحی


یا یه تیکه کد از تایعی که خودت نوشتی و به جای foreach استفاده میکنی

تو این لینک میتونین نمونه ای از دستورات لامبدا رو ببینی که خیلی راحت تمام یک گرید ویو رو پیمایش میکنه و خاصیت readonly سطر های زوج اونو برابر با True میکنه

http://barnamenevis.org/showthread.php?490211-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-property-%DB%8C%DA%A9-%D8%B4%DB%8C-%D8%AA%D9%88%D8%B3%D8%B7-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-lambda

rahnema1
شنبه 29 فروردین 1394, 12:15 عصر
سلام، قبلا توی یک تاپیک در این مورد بحث شده بود در خیلی از موارد سرعت for بیشتره اما گاهی وقتها هم میشه که سرعت foreach بیشتر میشه تو اون تاپیک گفته شده

SabaSabouhi
شنبه 29 فروردین 1394, 12:34 عصر
این لینک توضیح میده که for از foreach سریعتره

http://www.c-sharpcorner.com/UploadFile/dacca2/5-tips-to-improve-performance-of-C-Sharp-code/

سلام
دوست عزیز، من نگفتم که foreach از for سریع‌تر هست. خوانایی بالاتر و ساده‌تر شدن کدنویسی دلیل انتخاب من است.
در مورد سرعت و کارایی همیشه به یاد داشته باش که بابت چیزی هزینه بپرداز که ارزشش رو داشته باشه.
مثلاً اگه یه حلقه داری که 10 بار اجرا می‌شه، اختلاف زمان هنگام استفاده از فرمان‌های for یا foreach به حدی ناچیز هست
که قابل چشم پوشی هست.
شاید تو بعضی پروژه‌های خاص و اون هم فقط تو بعضی شرایط خاص باشه که زمان خیلی حیاتی می‌شه و صدم ثانیه‌ها هم
ارزش محاسبه دارن.
یه زمانی بود که کلی وقت می‌گذاشتیم که مثلاً 10 کیلوبایت حافظه کمتر مشغول بشه. اون زمان حافظه‌ها حدود 1 تا 4 مگابایت
بود، اما الان که حداقل 4 گیگابایت حافظه رو هر دستگاهی هست، این جور وسواس‌ها اصلاً ارزش ندارن.

به نظر من در حال حاضر 90% اهمیت مربوط هست که کاهش هزینه تولید و پشتیبانی. و به زبان ساده‌تر یعنی کد نویسی ساده ( کاهش هزینه‌ی تولید )
خوانایی بیشتر ( امکان استفاده از برنامه‌نویس‌های دیگر چه در تولید و چه در پشتیبانی )

صبا صبوحی