قرأت في أحد الكتب الطريقة التالية لإتاحة المزيد من الذاكرة للتطبيقات التي تستخدم الدوت نيت فرايموورك
GC.Collect() GC.WaitForPendingFinalizers()
حيث أن الأمر الأول يجبر الفريم وورك على تنفيذ garbage collection وبذلك يتخلص من جميع المتغيرات والكلاسات المنتهية والتي تبقى في الذاكرة المشتركة لتطبيقات الفريموورك حتى ينفذ النظام عملية Garbage Collection والتي لايمكنك التنبؤ متى سيقوم النظام بتنفيذها لأنها تتم بشكل آلي تماما من قبل النظام
والأمر الثاني يوقف تنفيذ المسار الحالي Current Thread حتى تنتهي العملية
ولكن بعدها يقول لك بأن استخدام هذه العملية هي فكرة سيئة برمجيا ولايجب تنفيذها في البرامج الفعلية وأنك بتنفيذها يدويا ستخسر ميزة من ميزات optimization للفريموورك وأنه يجب تنفيذها فقط عندما يكون البرنامج في حالة idle كانتظار لإدخال المستخدم مثلا وأنها ممكن أن تتسبب في بطء النظام ولا يجب تنفيذها عندما يكون البرنامج يحاول الحصول على التحكم على قطعة هاردوير مثلا لئلا يؤثر على زمن الاستجابة
مع ملاحظة أن هذه العملية تتم - وإن كنت قد نفذتها من داخل برنامجك - على مستوى الفريموورك ككل أي أن جميع التطبيقات التي تستخدم الفريموورك في وقت تنفيذها ستتأثر بشكل أو بآخر بالعملية
ولكن من الناحية العملية قمت بتجربة هذه العملية على برنامج يعطي رسائل خطأ غير متوقعة - مثل لايوجد ذاكرة كافية - في أوقات غير متوقعة وبدون أسباب ظاهرة - مع أن الجهاز الذي تتم عليه التجربة به 512 ميغا رامات - وعندما تتم تجربة البرنامج ضمن بيئة التطوير واستخدام الـ debug لمحاولة حصر المشكلة يعمل البرنامج بشكل سليم واستخدام هذه العملية ضمن أماكن معينة ضمن البرنامج قام بحل مشكلة رسائل الخطأ تلك
السؤال هنا
كيف أستطيع كمبرمج تحديد متى وأين يجب أن أستخدم أو لا أستخدم هذه الطريقة لتحرير الذاكرة المشتركة لتطبيقات الفريموورك بحيث أحصل دائما على الأداء الأفضل للجهاز والبرنامج؟؟؟؟؟؟؟؟؟؟؟؟؟؟

