هل هناك إشارات ضعيفة في .الشبكة ؟
-
19-08-2019 - |
سؤال
وأود أن تبقي قائمة من فئة معينة من الكائنات في طلبي.ولكن ما زلت أريد الكائن إلى أن القمامة التي تم جمعها.يمكنك إنشاء إشارات ضعيفة في .الشبكة ؟
للرجوع إليها:
الجواب من MSDN:
إنشاء ضعف الاشارة مع كائن إنشاء WeakReference باستخدام مثيل الكائن تعقب.ثم يمكنك تعيين الهدف مكان الإقامة إلى أن موضوع تعيين كائن إلى null.عن مدونة سبيل المثال ، انظر WeakReference في الصف المكتبة.
المحلول
نعم ، هناك عام ضعيفة الفئة المرجعية.
نصائح أخرى
يمكنك إنشاء إشارات ضعيفة في .الشبكة ؟
نعم:
WeakReference r = new WeakReference(obj);
يستخدم System.WeakReference
.
نعم...
هناك مثال جيد يمكن العثور عليها هنا:
في الفئة الخاصة بك يمكنك إنشاء اثنين من الأعضاء المتغيرات:
WeakReference _weakRef = null;
Person _strongRef = null;
يمكنك إنشاء اثنين من جديد Person
الكائنات (التي هي كائنات بسيطة أنا خلقت فقط على سبيل المثال ، تتكون من Name
الملكية و بعض المراجع شفرة التتبع).بجانب تعيين الأعضاء المتغيرات حديثا الحالات التي تم إنشاؤها Person
الكائنات.
_strongRef = p;
_weakRef = new WeakReference(p1);
الفرق هنا ستلاحظ أن _strongRef
هو مجرد عادي المرجعية ، بينما _weakRef
يتم تعيين WeakReference
كائن مع شخص كائن (p1)
مرت في كمعلمة في منشئ.
إذا جمع القمامة كانت تحدث ، أو فقط لأغراض الاختبار اتصلت بنفسك مع:
GC.Collect();
ثم p1
الكائن الهدف الذي يقام من قبل _weakRef
عضو متغير يجب أن يكون القمامة التي تم جمعها.يمكنك كتابة رمز التحقق:
if (_weakRef.IsAlive)
إذا كان WeakReference
لا يزال على قيد الحياة يمكنك تحويل WeakReference
قوية أو عادية المرجعية باستخدام رمز مثل هذا:
Person p = _weakRef.Target as Person;
الآن p
المرجع هو تعامل على أنها إشارة قوية و لن يكون جمعها حتى أنها لم تعد تستخدم.إذا أردت الحفاظ على المرجعية بعد نطاق يمكن تعيين إلى متغير عضو.
هنا هو الكاملة (غير الآمن موضوع) تنفيذ عينة من WeakReference
ClassA objA = new ClassA();
WeakReference wr = new WeakReference(objA);
// do stuff
GC.Collect();
ClassA objA2;
if (wr.IsAlive)
objA2 = wr.Target as ClassA;
else
objA2 = new ClassA(); // create it directly if required
WeakReference
هو في System
مساحة وبالتالي لا تحتاج إلى تضمين أي الجمعية الخاصة من أجل ذلك.