إنهاء وظائف و Destructors
لمعظم الكائنات التي تقوم بإنشاء تطبيق الخاص بك، يمكنك الاعتماد تشغيل collecإلىr البيانات المهملة.NET Framework إلى ضمنياً بتنفيذ الجميع مهام إدارة ذاكرة اللازمة. ومع ذلك، عندما تقوم بإنشاء الكائنات التي تغلف موارد غير مدار، يجب أن بوضوح تحرير الموارد غير المدارة عند الانتهاء من استخدامها في تطبيق الخاص بك. نوع مورد غير المدار الأكثر شيوعاً هو كائن التفاف أحد موارد النظام التشغيل، مثل كـ ملف أو نافذة، أو شبكة الاتصال. على الرغم من أن collecإلىr البيانات المهملة إلى مقطع صوتي فترة تواجد كائن يغلف مورد غير مدار، ولم يكن لديه معرفة معينة حول كيفية إلى تنظيف المورد. لهذه الأنواع من الكائنات، يوفر إطار عمل.NET الطريقة كائن.Finalize ، مما يسمح كائن إلى تنظيف موارد غير مدارة بشكل صحيح عند collecإلىr البيانات المهملة reclaims ذاكرة المستخدمة من قبل الكائن. بشكل افتراضي، Finalize أسلوب أدى أي شيء. إذا كنت ترغب في collecإلىr البيانات المهملة إلى إجراء العمليات تنظيف تشغيل الكائن الخاص بك قبل ذلك reclaims ذاكرة الخاص بالكائن، يجب يمنع الطريقة Finalize في فئة.
ملاحظة |
---|
لتطبيق Finalize الأسلوب في C#، يجب استخدام بناء جملة destructor .في.NET Framework الإصدار 2.0، يوفر Visual C + + بناء الجملة الخاص به لتنفيذ Finalizeأسلوب، كما هو موضح في Destructors and Finalizers in Visual C++.في the .NET الإصدار إطار العمل 1.0 و 1.1, Visual C++ used destructor بناء الجملة for the Finalize أسلوب, كـ C# does. |
The حاوي المهملات keeps مقطع صوتي of الكائنات that have Finalize وظائف, using an internal بنية called the finalization قائمة الانتظار. Each الوقت your تطبيق creates an كائن that has a Finalize أسلوب, the حاوي المهملات places an إدخال في the finalization قائمة الانتظار that نقاط إلى that كائن. The finalization قائمة الانتظار يحتوي على entries for الجميع the الكائنات في the مدارة كومة ذاكرة مؤقتة that need إلى have their finalization تعليمات برمجية called قبل the حاوي المهملات can reclaim their ذاكرة.
ملاحظة |
---|
تعليمات برمجية المثال موفراً GC.KeepAliveالعروض أسلوب كيفية تجميع البيانات المهملة عدواني يؤدي أداة الإنهاء لتعمل مع عضو من الكائن reclaimed هو سيظل تنفيذ، وكيفية استخدام KeepAliveطريقة لمنع هذا. |
Finalizeلا يقوم أسلوب الإلقاء الاستثناءات، لأنها لا تكون hوled قبل تطبيق و يمكن أن يؤدي إلى ينهي تطبيق.
Finalize تنفيذ الأساليب أو destructors يمكن أن يكون تأثير سلبي تشغيل أداء و يجب تجنب استخدام ضرورة. reclaiming ذاكرة المستخدمة بواسطة الكائنات باستخدام وظائف Finalize تتطلب مجموعات البيانات المهملة الثاني على الأقل. عندما تقوم بتنفيذ حاوي المهملات مجموعة، reclaims ذاكرة لكائنات لا يمكن الوصول إليه دون finalizers. في هذا الوقت، فإنه لا يمكن جمع لا يمكن الوصول إلى الكائنات التي لديك finalizers. بدلاً من ذلك، قم بإزالة الإدخالات لهذه الكائنات من قائمة انتظار الإنهاء ويضعها في قائمة بالكائنات التي وضعت لها علامة جاهز للإنهاء. الإدخالات الموجودة في هذه القائمة بالإشارة إلى الكائنات التي تكون على استعداد للإنهاء الخاصة بهم في الكومة المدار تعليمات برمجية المسمى. حاوي المهملات تستدعي Finalize وظائف الكائنات الموجودة في هذه القائمة و ثم إزالة الإدخالات من القائمة. المستقبل تجميع البيانات المهملة يحدد أن الكائنات finalized هي شكل صحيح البيانات المهملة لأنه لم يعد يتم بالمشار إليه بالإدخالات في قائمة الكائنات التي تم وضع علامة على أنها جاهزة للإنهاء. في هو استخلاص عن هذه المجموعة البيانات المهملة المستقبلية، وذاكرة الكائنات الموجودة فعلياً.