[C#] هل توقف معالجات الحدث إيقاف تجميع البيانات المهملة؟


Answers

في اللحظة التي لم يعد تتم الإشارة إلى جزء من الذاكرة يصبح مرشحًا لجمع البيانات المهملة. عندما يخرج نطاق فصلك عن نطاقه ، لن يتم الرجوع إليه بواسطة برنامجك. لم تعد مستخدمة وبالتالي يمكن جمعها بأمان.

إذا لم تكن متأكدًا من أن هناك شيئًا يتم جمعه ، اسأل نفسك عن السؤال التالي: هل لا تزال هناك إشارة إلى ذلك؟ تتم الإشارة إلى معالجات الأحداث بواسطة مثيل الكائن ، وليس العكس.

Question

إذا كان لدي الكود التالي:

MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass = null;

هل سيتم تجميع pClass؟ أم أنها ستبقى مستمرة في إطلاق أحداثها كلما حدثت؟ هل سأحتاج إلى القيام بما يلي للسماح بجمع النفايات؟

MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass.MyEvent -= MyFunction;
pClass = null;



سيكون pClass جمع القمامة. ومع ذلك ، إذا كان مقتطف الشفرة أعلاه داخل فئة أخرى ، فقد لا يتم مسح مثيل هذه الفئة إذا لم تقم بتعيين pClass على قيمة null .