تكرار السؤال: …
الإجابة المختصرة
هو استبدال استدعاء الدالة بكود جسمها مباشرة لتوفير تكلفة الـ Call Stack والقفز بالمعالج؛ وتستخدم للدوائر السريعة والصغيرة جداً في المسارات الحيوية.
الشرح
يقوم مجمع JIT تلقائياً بتضمين الدوال الصغيرة التي يقل حجمها عن حد معين. استدعاء الدالة العادي يتطلب دفع المعاملات في الـ Stack وقفز مسار المعالج (Call/Return). استخدام AggressiveInlining يجبر الـ JIT على دمج الدالة في كود المستدعي مباشرة. ومع ذلك، فإن الإفراط في استخدامها مع دوال كبيرة يؤدي لتضخم حجم كود الآلة (Code Bloat) وخروج الكود من كاش المعالج السريع (L1/L2 Instruction Cache).
مثال بالكود
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int FastMax(int a, int b) => a > b ? a : b;أخطاء شائعة
- وضع AggressiveInlining على دوال كبيرة ومعقدة تحتوي على استثناءات مما يؤدي لتدهور كفاءة الكاش وتراجع الأداء.