حلقه foreach بهتر است یا for loop
سلام دوستان
یک سوال داشتم. توی اکثر زبانهای برنامه نویسی 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 صرفا برای چک کردن نیست، میتونه تولید یه عدد ساده تو یه رنجی باشه
نمیشه گفت کدوم بهتره، هرکدوم برا کارکرد خودش خوبه
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول