هل البرمجة.القاموس RemoveAll() طريقة الإفراج عن جميع عناصرها أولا ؟

StackOverflow https://stackoverflow.com/questions/75011

سؤال

في VB6 التطبيق لدي Dictionary الذي المفاتيح Strings والقيم الحالات من فئة مخصصة.لو اتصل RemoveAll() على Dictionary, ، وسوف الحرة الأولى مخصصة الكائنات ؟ أو هل أنا صراحة تحتاج إلى القيام بذلك بنفسي ؟

Dim d as Scripting.Dictionary

d("a") = New clsCustom
d("b") = New clsCustom

' Are these two lines necessary?
Set d("a") = Nothing
Set d("b") = Nothing

d.RemoveAll
هل كانت مفيدة؟

المحلول

نعم ، كل الكائنات في Dictionary سيتم الافراج عنهم بعد استدعاء RemoveAll().من الأداء (كما في السرعة) نظر أود أن أقول تلك الخطوط تحديد المتغيرات Nothing غير ضرورية, لأن رمز إلى أول نظرة لهم على أساس مفتاح أسماء حين RemoveAll() سوف نعدد والإفراج عن كل شيء في حلقة واحدة.

نصائح أخرى

RemoveAll سيتم إزالة جميع الجمعيات من Dictionary:كل المفاتيح والقيم.سيكون مرجع تسرب عن Dictionary للحفاظ على إشارة إلى القيم في Dictionary.

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

إذا كنت على سبيل المثال هل هذا حيث sObj هو متغير ثابت في مكان ما ثم عندما GC استدعاء المقبل من قبل النظام ، الكائن الأول سيتم تنظيف ولكن الثاني الذي لا يزال هو المشار إليه من قبل sObj لا.

d("a") = New clsCustom
d("b") = New clsCustom code.
sObj = d("b")

d.RemoveAll()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top