الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Garbage Collector سؤال يطرح نفسه

بدأه زيد الرافدين في 3 أكتوبر 2008 · 10 رد · 1,540 مشاهدة · في قسم تكنولوجيا Microsoft .NET العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

يعرف جميع مبرمجي الدوت نت Garbage collector هو المسوؤل عن السيطرة على محتويات Memory من Managed Resources

وننعلم ان Garbage collector يقوم بعمل Collect لل Objects الموجودة في Heap التي لاترتبط بــ Reference في Stack

لكن لدي سؤالين يحيران تفكيري وهما :

1- الا يوجد طريقة للتخلص من Object الموجود في Heap من دون انتظار عملية Collect من Garbage collector ؟؟ كان يكون كود مثلا

2- حسب اطلاعي يقوم Garbage collector بعملية Collect فقط عندما تمتلآ ال Heap الا يشكل هذا الانتظار خطر على اداء النظام والحاسب !

تحياتي

#2

1 - نعم وذلك باستخدام الكود

GC.Collect()

مع ملاحظة أنه من الأفضل عدم التدخل بعمل GC وتركه يقوم بالعمل بشكل تلقائي

2 - هذا الكلام غير دقيق فـ GC يقوم بعملية التنظيف بصورة دورية وفق قوانين محددة

إضافة إلى أن حجم الذاكرة الذي تشغله الـ Heap محدد سلفا ولا يمتد ليستهلك كافة مصادر النظام

ولي موضوعان قديمان ناقشنا فيها موضوع GC يمكنك الاطلاع عليهما إدارة المصادر والواجهة IDisposable و سؤال: بخصوص GarbageCollection

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 3 أكتوبر 2008 في 18:22

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3
اقتباس
الا يوجد طريقة للتخلص من Object الموجود في Heap من دون انتظار عملية Collect من Garbage collector ؟؟ كان يكون كود مثلا

استخدم الكود التالي

GC.Collect();

و لو انك معاك reference لل object استخدم object.Dispose method او objRef = null ثم GC.Collect

اقتباس
حسب اطلاعي يقوم Garbage collector بعملية Collect فقط عندما تمتلآ ال Heap الا يشكل هذا الانتظار خطر على اداء النظام والحاسب

لا

بل يقوم بعمل collect بشكل دوري

اسف ربما كتبت مشاركتي في نفس الوقت مع اخي محمد سامر :)

#4

شكرا يااخوان على الرد السريع

1- بخصوص

GC.Collect();

انا عارف هذا الكود لكن قصدي الا يوجد كود لازالة Object معين من دون حاجة الى عمل Collect ؟ يبدو لي انه لايجود

اما بخصوص عمل Collect فقط عندما تمتلآ ال Heap .. فانا قرأت هذه المعلومة في كتاب Apress Professional C# 2008

لكن يبدو لي ان هذه المعلومة غير صحيحة !!

اقتباس
هذا الكلام غير دقيق فـ GC يقوم بعملية التنظيف بصورة دورية وفق قوانين محددة

اخ محمد هل لديك اي فكرة حول هذه القوانين وماهي ؟

شكرا

تم تعديل هذه المشاركة بواسطة زيد الرافدين في 3 أكتوبر 2008 في 18:52

#5

لا يمكنك التحكم في متى يقوم الGC بعملية التنظيف, حتى استخدام Dispose لا يضمن لك انهاء الobject من الMemory و لكن يضمن لك فقط أن الكود الذي تريده أن يعمل لتحرير جميع الموارد التي قمت باستخدامها مثل الملفات و الconnections و غيرها من الموارد قد تم تنفيذه.

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#6
زيد الرافدين كتب:
اخ محمد هل لديك اي فكرة حول هذه القوانين وماهي ؟

شكرا

جميع معلوماتي بهذا الخصوص موجودة في مواضيعي التي وضعت لك روابطها سابقا

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#7

المشكلة اننا فريق سيقوم ببناء موقع يتكون من تقريبا 300 صفحة تفاعلية بالاضافة الى الكثير من المكتبات

والمشروع معقد جدا وفيه استخدام لكثير من اوبجيكتات وانا خائف ان يحدث مشكلة ويفشل المشروع اثناء الضغط لامتلاء الرامات !!

فهل يجب علي ان اكمل في تصميم الموقع العملاق في بيئة الدوت نت !!

شكرا

#8

إن اتبعت النصائح الموجودة في مقالتي إدارة المصادر والواجهة IDisposable لا أعتقد أنك ستواجه أي مشكلة وخصوصا إن كنت تتعامل مع النسخة 2005 أو 2008 حيث هناك العديد من التحسينات حول موضوع إدارة الذاكرة وبشكل عام طالما أنك تعمل على الدوت نيت لايوجد داعي للقلق بخصوص مشاكل إدارة الذاكرة فالفريموورك ستقوم بذلك من أجلك وبشكل مرضي إن شاء الله

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#9

اذا كنت تريد التعمق في الدوت نت اقرأ كتاب #CLR via C ففيه فصل كامل عن الGC

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#10

لو أنك تريد أن تتحكم فى الObject الخاصة بك قم بالبرمجة عن طريق C++

أما الدوت نيت فلايمكن هذاو الله أعلم

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

مواضيع مشابهة