LINQ - Deferred Execution
LINQ - Deferred Execution
Deferred Execution في LINQ هو تأجيل تنفيذ الاستعلام حتى يتم استدعاؤه فعليًا، وليس عند تعريفه.
كيف يعمل؟
عندما تكتب استعلام LINQ، فإنه لا يتم تنفيذه فورًا، بل يتم تحويله إلى كائن يمكن تشغيله لاحقًا عند الحاجة إلى البيانات. يتم تنفيذ الاستعلام فقط عند محاولة الوصول إلى العناصر، مثل:
عندما تكتب استعلام LINQ، فإنه لا يتم تنفيذه فورًا، بل يتم تحويله إلى كائن يمكن تشغيله لاحقًا عند الحاجة إلى البيانات. يتم تنفيذ الاستعلام فقط عند محاولة الوصول إلى العناصر، مثل:
استخدام حلقة
foreach
استدعاء
ToList()
, ToArray()
, Count()
, أو أي دالة تنفذ الاستعلام بالفعل
مثال على Deferred Execution
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// تعريف الاستعلام (لم يتم تنفيذه بعد)
var query = numbers.Where(n => n > 2);
// تنفيذ الاستعلام عند المرور عليه
foreach (var num in query)
{
Console.WriteLine(num);
}
هنا، يتم تنفيذ query
عند تشغيل حلقة foreach
وليس عند تعريفه.
متى يحدث Immediate Execution؟
إذا استخدمت دالة مثل
ToList()
, ToArray()
, Count()
، فسيتم تنفيذ الاستعلام فورًا:
var result = numbers.Where(n => n > 2).ToList(); // يتم التنفيذ مباشرةً
في هذه الحالة، سيتم جلب البيانات فورًا إلى القائمة
result
.
فوائد Deferred Execution
تحسين الأداء: يتم تنفيذ الاستعلام فقط عند الحاجة إلى البيانات.
توفير الموارد: لا يتم تحميل البيانات غير المستخدمة.
المرونة: يمكن تعديل البيانات قبل التنفيذ الفعلي للاستعلام.
لكن كن حذرًا، لأن أي تغيير في المصدر (
تحسين الأداء: يتم تنفيذ الاستعلام فقط عند الحاجة إلى البيانات.
توفير الموارد: لا يتم تحميل البيانات غير المستخدمة.
المرونة: يمكن تعديل البيانات قبل التنفيذ الفعلي للاستعلام.
لكن كن حذرًا، لأن أي تغيير في المصدر (
numbers
في المثال) قبل التنفيذ سيؤثر على النتيجة.
تعليقات
إرسال تعليق