سلام دوستان
یک سوال داشتم. توی اکثر زبانهای برنامه نویسی 2 نوع حلقه for داریم.
اول حلقه for each
foreach (var item in collection)
{
}
و دوم هم حلقه for معمولی یا همون for loop
for (int i = 0; i < length; i++)
{
}
البته من تفاوت این دو حلقه رو میدونم و میدونم گاهی باید از foreach استفاده بشه.
اما سوالم اینه در یک شرایط مساوی کدوم یک از این 2 حلقه کارایی بهتری داره و سریعتر اجرا میشن ؟
سلام.
مسلما حلقه for سرعت بیشتری نسبت به foreach داره. و اگر در شرایط مساوی قرار گرفتید حتما از for استفاده کنید. اما سرعت زمانی خودشو نشون میده که تعداد آرایه یا چرخش حلقه خیلی زیاد بشه و در تعداد لوپ پایین سرعت خودشو زیاد نشون نمیده و میشه گفت سرعتشون تقریبا برابره! (اما به طور کلی سرعت for بیشتر از foreach است)
لینک زیر رو هم مطالعه کنید بد نیست.
حلقه foreach کندتر از حلقه for loop هست.
اما چرا foreach کندتر است؟
اگر با آرایه هایی کار می کنید که ابعاد مشخصی دارند فرقی بین for-loop و for-each وجود ندارد. از آنجا که در پس زمینه کامپایلر سی شارپ بجای حلقه ی for-each حلقه ی for-loop جایگزین می کند.
اما این تنها در صورتی است که آرایه را به IEnumerable تبدیل نکنید. کلاس IEnumerable برای پردازش آرایه از توابع Current و MoveNext استفاده می کند که در هر بار اجرای حلقه موقعیت جاری را چک می کند و شامل بک فرآیند try-catch هم میشود. این مسئله یک سربار روی حافظه و پردازش ایجاد می کند و منجر به کندتر شدن پردازش می شود. حتی اگر آرایه ابعاد ثابتی داشته باشد از آنجا که به IEnumerable تبدیل شده در پس زمینه قابل تبدیل به for-loop نیست.
پس به طور کلی for-each کندتر از for-loop است. در مواردی که پرفورمنس حلقه اهمیت زیادی پیدا می کند بهتر است آن را با for-loop جایگزین کنید.
البته همیشه سرعت عامل تعیین کننده انتخاب نوع دستورات نیست کارایی فرامین هم مهمه مسلماً کارایی foreach بهتره و درصد خطای محاسباتی برنامه نویس رو هم پایین میاره به خصوص چایی که ممکنه تشخیص ندید دقیقا تعداد دفعات انجام عمل چند تاست
سلام
نوع عملکرد این حلقه ها متفاوت هست و هرکدوم کارکرد خودشو داره
وقتی شما بخواید تمام آیتم های یه مجموعه رو چک کنید از foreach استفاده میکنید
اما for صرفا برای چک کردن نیست، میتونه تولید یه عدد ساده تو یه رنجی باشه
نمیشه گفت کدوم بهتره، هرکدوم برا کارکرد خودش خوبه
تاریخ :
1399/11/25
- ساعت :
11:22:00 AM
- بازدید :
3896
- پاسخ :
2
|
تاریخ :
1403/12/02
- ساعت :
12:09:00 AM
- بازدید :
270
- پاسخ :
1
|
تاریخ :
1399/10/17
- ساعت :
09:04:00 PM
- بازدید :
2709
- پاسخ :
1
|
تاریخ :
1398/07/08
- ساعت :
12:21:00 AM
- بازدید :
3048
- پاسخ :
2
|
تاریخ :
1403/11/23
- ساعت :
08:24:00 PM
- بازدید :
191
- پاسخ :
2
|
تاریخ :
1399/11/10
- ساعت :
10:01:00 PM
- بازدید :
7167
- پاسخ :
4
|
تاریخ :
1399/04/09
- ساعت :
08:51:00 PM
- بازدید :
3094
- پاسخ :
1
|
تاریخ :
1399/03/25
- ساعت :
08:58:00 PM
- بازدید :
3825
- پاسخ :
1
|
تاریخ :
1398/10/03
- ساعت :
10:47:00 PM
- بازدید :
5336
- پاسخ :
8
|
تاریخ :
1400/12/18
- ساعت :
10:24:00 AM
- بازدید :
2111
- پاسخ :
1
|
تاریخ :
1404/01/07
- ساعت :
05:02:00 AM
- بازدید :
89
- پاسخ :
1
|
تاریخ :
1402/04/28
- ساعت :
09:04:00 PM
- بازدید :
1314
- پاسخ :
0
|
تاریخ :
1403/12/30
- ساعت :
06:43:00 PM
- بازدید :
66
- پاسخ :
1
|
تاریخ :
1398/08/23
- ساعت :
09:16:00 PM
- بازدید :
9852
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
12:18:00 PM
- بازدید :
38
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
10:39:00 AM
- بازدید :
45
- پاسخ :
1
|
تاریخ :
1404/01/02
- ساعت :
05:05:00 PM
- بازدید :
60
- پاسخ :
1
|
تاریخ :
1403/12/30
- ساعت :
06:52:00 PM
- بازدید :
48
- پاسخ :
1
|
تاریخ :
1399/06/04
- ساعت :
02:25:00 PM
- بازدید :
4419
- پاسخ :
2
|
تاریخ :
1403/11/30
- ساعت :
10:36:00 AM
- بازدید :
202
- پاسخ :
2
|