سؤال

في .NET Framework 3.5، هل تعمل WeakReference مع سلسلة أو سأقوم التفاف عليه في "الطبقة" الصغيرة والعمل على انجاحه مع ذلك؟

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

المحلول

وSystem.String (string في C #) هو نوع مرجع، حتى لا يكون هناك أي سبب أنه لا ينبغي أن تعمل بشكل جيد مع perfecctly <لأ href = "http://msdn.microsoft.com/en-us/library/system.weakreference .aspx اتصال "يختلط =" نوفولو noreferrer "> WeakReference . تجاهل حقيقة أنه في بعض الطرق نوع مرجع خاص (غير قابل للتغيير، لتبدأ) - في CLR تعتبره نوع مرجع

وهذا القول، هذا البعض موضوع ستاكوفيرفلوو يجعل نقطة جيدة أن الإشارات سلسلة يمكن "يعتقل" في كثير الحالات، وبالتالي فإن السلوك "المتوقع" فيما يتعلق جمع القمامة يكن لوحظ.

نصائح أخرى

وهذا وستعمل بالتأكيد مع WeakReference دون أي مشاكل كما System.String نوع مرجع بسيط. سيكون من المثير للاهتمام أن نرى حالة استخدامك لاستخدام WeakReference كما لا يبدو لتناسب الاستخدامات "العادية" من WeakReference.

MSDN المبادئ التوجيهية :

استخدم الإشارات الضعيفة فترة طويلة إلا عند الضرورة مثل حالة الكائن لا يمكن التنبؤ بها بعد الانتهاء.

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

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

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

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