أداء الحلقات التكرارية
جزء من قسم المنطق وتدفق التنفيذ في رحلة C# على Coddy. الدرس 13 من 66.
يمكن أن يؤدي تحسين أداء الحلقة إلى تحسين سرعة تطبيقك بشكل ملحوظ، وخاصةً مع مجموعات البيانات الكبيرة.
خزّن طول المجموعة في متغيّر قبل الحلقة:
int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // خزّن الطول مرة واحدة
for (int i = 0; i < length; i++) // استخدم القيمة المخزنة
{
Console.WriteLine(numbers[i]);
}تجنّب استدعاءات method المتكررة في شروط الحلقة، على سبيل المثال:
for (int i = 0; i < GetCount(); i++)
{
// جسم الحلقة
}يتم called على الطريقة GetCount() في كل iteration من الحلقة. وهذا يعني أنه إذا تكررت الحلقة 1000 مرة، فسيتم تنفيذ GetCount() 1000 مرة أيضًا، لأن شرط الحلقة يُقيَّم قبل كل iteration.
إليك كيفية القيام بذلك بشكل صحيح:
int count = GetCount();
for (int i = 0; i < count; i++)
{
// جسم الحلقة
}يتم called على GetCount() مرة واحدة فقط قبل بدء الحلقة، وتُخزَّن قيمته في المتغير count. ثم تستخدم الحلقة هذه القيمة stored في جميع التكرارات، مما يلغي الحاجة إلى استدعاء method بشكل متكرر.
يمكن لهذا النهج أن يجعل شيفرتك تعمل بشكل أسرع من خلال تقليل العمليات الزائدة، خاصةً عندما ينفّذ الأسلوب الذي يتم استدعاؤه حسابات معقدة أو يصل إلى البيانات.
التحدي
سهلأنشئ method called optimizedSum تقوم بما يلي:
- تأخذ مصفوفة من الأعداد الصحيحة كمعامل
- تحسب مجموع جميع العناصر
- تطبّق أسلوبين، optimized وUnoptimized:
- Unoptimized: استدعِ array.Length في كل تكرار للحلقة
- optimized: خزّن length مؤقتًا قبل الحلقة
- تُرجع result من الأسلوب optimized
جرّب بنفسك
public class OptimizedSum
{
// قم بتنفيذ الدالة optimizedSum
public static int optimizedSum(int[] numbers)
{
// اكتب الكود الخاص بك هنا
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادتعريف وتهيئة المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادالمصفوفات المتعرجة (Jagged Arrays)عمليات المصفوفات الشائعةمراجعة - المصفوفات متعددة الأبعاد4تقنيات التحكم في التدفق
الإرجاع المبكرشروط الحمايةجمل القفز (goto)Break و Continueتسطيح الشروط المتداخلة7المعاملات المنطقية المتقدمة
التقييم المختصرالمعاملات المنطقية الشرطيةأولوية المعاملاتمراجعة - المعاملات المتقدمة2اتخاذ القرارات المتقدم
الشروط المتعددةالمنطق البولياني المعقدمقارنة بين If و Switchجمل Switch المتداخلةمراجعة - القرارات المتقدمة5معالجة الاستثناءات
أساسيات Try-Catchأنواع الاستثناءاتكتل Catch المتعددةالتعامل مع الملفاتكتلة FinallyUsing مقابل Try-Finallyاستثناءات مخصصةمراجعة - معالجة الأخطاء8نظام تحليل البيانات
إعداد جمع البياناتمنطق إدخال البيانات11HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمملخص - HashSet3تحسينات الحلقات التكرارية
أداء الحلقات التكراريةالتكرار عبر البيانات المعقدةأنواع الحلقات التكراريةإعادة هيكلة الحلقات التكراريةملخص - الحلقات المحسنة6التعامل مع الـ Null
أساسيات الـ Null Referenceأنواع القيم القابلة للـ Nullأنماط التحقق من الـ Nullالبرمجة الدفاعيةملخص - أمان الـ Nullتدرّب بنفسك: مترجم C# عبر الإنترنت