khaledbelal
02-26-2010, 04:17 PM
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
خلال دروسنا السابقة كنا نعرف متغيرات وفئات .. الخ ، ولكننا لم نسأل نفسنا كيف يتم تخزينها في الذاكرة ومتى يتم حذفها ، هذه الاسئلة سوف نجيب عليها في هذا الدرس من خلال مفاهيم ال Object lifetime وال GC .
عند تعريفك لكائن من فئة OBJECT FROM CLASS فإنك بالواقع تصبح ممسكاً ب refernce يشير إلى هذا الكائن الموجود في ال heap ، هذا ال reference يوجد ايضاً في stack خاص بالبرنامج .
بعد اغلاق البرنامج او انتهاء الدالة يتم حذف ال reference من ال stack ، سيكون التساؤل الطبيعي هو انه وفي هذه الحالة سوف تمتلئ الذاكرة بمئات الكائنات التي لا تجد من يشير لها ، يريحك ال garbage collector والذي يرمز له اختصاراً GC من هذا التساؤل حيث يقوم بحذف الفئات غير المستخدمة ، او في الحقيقة فهو يقوم بحذف جميع الفئات التي لم يعد بامكانك الوصول إليها من داخل البرنامج .
في ايام ال C++ كان من المفترض ان تقوم بحذف متغيراتك الغير مستخدمة اول بأول ، اما الآن مع GC فاصبحت جل المهام يتم تنفيذها دون ان تشعر .
الحالة الاكثر شيوعاً هي ان تقوم بعمل =null ، في الواقع هذا لا يعطي اشارة مباشرة لل GC لحذف كائنك من الذاكرة ، لكنه سيتم حذفه في لحظة ما لا يمكنك التحكم بها ، عندما تمتلئ الذاكرة مثلاً .
GC :
تحتوي الفئة GC على عدد من الداول التي تمكنك من التعامل المباشر معها ، هذه هي الدوال واستخداماتها :
http://vb4arab.com/vb/uploaded/3/01208376003.jpg
Finalize() :
يمكنك هذا الحدث من اقتناص وقت حذف الكائن ، يمكنك عمل overridding له وتنفيذ بعض المهام قبل تدمير الكائن .
يتم ذلك بالشكل التالي :
C#:
class example
{
~example()
{
Console.Beep();
}
}
vb.net:
Class example
Protected Overrides Sub Finalize()
Try
Console.Beep()
Finally
My****.Finalize()
End Try
End Sub
End Class
السلام عليكم ورحمة الله وبركاته .
خلال دروسنا السابقة كنا نعرف متغيرات وفئات .. الخ ، ولكننا لم نسأل نفسنا كيف يتم تخزينها في الذاكرة ومتى يتم حذفها ، هذه الاسئلة سوف نجيب عليها في هذا الدرس من خلال مفاهيم ال Object lifetime وال GC .
عند تعريفك لكائن من فئة OBJECT FROM CLASS فإنك بالواقع تصبح ممسكاً ب refernce يشير إلى هذا الكائن الموجود في ال heap ، هذا ال reference يوجد ايضاً في stack خاص بالبرنامج .
بعد اغلاق البرنامج او انتهاء الدالة يتم حذف ال reference من ال stack ، سيكون التساؤل الطبيعي هو انه وفي هذه الحالة سوف تمتلئ الذاكرة بمئات الكائنات التي لا تجد من يشير لها ، يريحك ال garbage collector والذي يرمز له اختصاراً GC من هذا التساؤل حيث يقوم بحذف الفئات غير المستخدمة ، او في الحقيقة فهو يقوم بحذف جميع الفئات التي لم يعد بامكانك الوصول إليها من داخل البرنامج .
في ايام ال C++ كان من المفترض ان تقوم بحذف متغيراتك الغير مستخدمة اول بأول ، اما الآن مع GC فاصبحت جل المهام يتم تنفيذها دون ان تشعر .
الحالة الاكثر شيوعاً هي ان تقوم بعمل =null ، في الواقع هذا لا يعطي اشارة مباشرة لل GC لحذف كائنك من الذاكرة ، لكنه سيتم حذفه في لحظة ما لا يمكنك التحكم بها ، عندما تمتلئ الذاكرة مثلاً .
GC :
تحتوي الفئة GC على عدد من الداول التي تمكنك من التعامل المباشر معها ، هذه هي الدوال واستخداماتها :
http://vb4arab.com/vb/uploaded/3/01208376003.jpg
Finalize() :
يمكنك هذا الحدث من اقتناص وقت حذف الكائن ، يمكنك عمل overridding له وتنفيذ بعض المهام قبل تدمير الكائن .
يتم ذلك بالشكل التالي :
C#:
class example
{
~example()
{
Console.Beep();
}
}
vb.net:
Class example
Protected Overrides Sub Finalize()
Try
Console.Beep()
Finally
My****.Finalize()
End Try
End Sub
End Class