[c#] هل من الضروري إزالة معالجات الأحداث بشكل صريح في C #


0 Answers

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

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

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

فقط لأن الكائن خارج نطاق تخصيصه الأصلي لا يعني أنه مرشح لـ GC. طالما بقيت إشارة حية ، فهي حية.

Question

لدي فصل يقدم عددًا قليلاً من الأحداث. يتم الإعلان عن هذه الفئة على مستوى العالم ولكن لا يتم تطبيقها على هذا الإعلان العالمي - فهي تتم على أساس ما هو مطلوب في الأساليب التي تحتاج إليه.

في كل مرة تكون فيها هذه الفئة مطلوبة في طريقة ما ، يتم تمثيلها ويتم تسجيل معالجات الأحداث. هل من الضروري إزالة معالجات الأحداث صراحة قبل أن تخرج هذه الطريقة خارج النطاق؟

عندما تخرج هذه الطريقة من النطاق ، فإن ذلك ينطبق على مثيل الفصل. هل تترك معالجات الأحداث التي تم تسجيلها في تلك الحالة التي تخرج من نطاقها تأثيرًا على مساحة الذاكرة؟ (أنا أتساءل عما إذا كان معالج الحدث يحافظ على رؤية GC لمثيل الفئة لأنه لم يعد يتم الرجوع إليه.)

شكرا لكم.




Related