بحاجة إلى مساعدة في القضاء على المراجع الضعيفة في التطبيق الخاص بي

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

  •  12-09-2019
  •  | 
  •  

سؤال

أحاول حل تسرب الذاكرة في تطبيقي. لقد قمت بتنزيل و RAN Redgate's Ants Memory Profiler 5.0 ويحكي Memory Profiler أن تسرب يجب أن يفعله مع الضعف.

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

لذلك سؤالي هو كيف يمكنني تحديد مكان وجود هذه المراجع الضعيفة من؟ لدي شكوك بأنه قد يكون استخدام byref؟ اقترح شاملة آخر هاشتاين.

على أمل الحصول على بعض التوضيح بشأن الكشف عن الضعيف والتخلص وبعض التوضيح بشأن شكوكي.

شكرا.

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

المحلول 3

اكتشفت أنه تم إنشاء الضعف الخاص بي بواسطة System.Diagnostics.textWritterTracelistener. ما زلت لم أحصل على تسرب الذاكرة الخاصة بي وأنا أبدأ في ذلك، فأنا بدأت في السؤال عما إذا كان لدي تسرب ذاكرة أم لا، لكنني أرتاح معرفته من أين يأتي الضعف.

شكرا لجميع الذين نشرها!

نصائح أخرى

في المعارك مع تسرب الموارد .NET (الذاكرة / المقابض / المواضيع / الخ) وجدنا كولبري واحد يرتفع فوق كل شيء آخر: معالجات الأحداث العالقة. إذا كان لدي كائن أود التخلص منها، لكن لا يزال لدي معالج حدث مسجل لحدث هذا الكائن، فلن يزول الكائن حقا - هذه الزومبي يتضاعفون وسلسلة معا في سلاسل حتى فقاعة! أنت تطبيق مدار لديه ما هو لجميع النوايا والأغراض تسرب الموارد.

لقد أخذنا نهج البندقية ونقضمنا الأكثر استخداما، والأثقل، والفئات من أجل الأحداث التي نضيفها يدويا وإنتاج الكلمة الأساسية ل VB.NET's "Handles" وضمان استدعاء إزالةمنديلر / - = = لكل من خلال التخلص منها. نحن نتخلص صريحا أيضا قدر الإمكان.

النمل أداة رائعة لتتبع هذه أسفل، لكنها ليست أداة بسيطة (ولكنها أبسط الأدوات التي وجدتها لهذه المشكلات). قضاء بعض الوقت في التعرف على ذلك، وإذا كنت في الإصدار 5، فاستفيد من هذه المرشحات الجديدة.

لسوء الحظ، لا توجد رصاصة فضية، إنها واحدة من أكبر عدد من أكبر حالاتي مع .NET لأنك لا تعرف عادة أن لديك مشكلة حتى ينتشر بشكل رائع ويصعب حدوثها.

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

أنا لم أعمل في منشط الذاكرة ولكن:

جميع تسرب الذاكرة الخاصة بي في تطبيق. NET يجب أن تفعل مع الأحداث / المندوبين.

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

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

تسرب الذاكرة هذا هو خطأ معروف في أطر .NET. __encList هي فئة .NET الداخلية المستخدمة لتوفير تحرير واستمرار الوظائف. الدقة الوحيدة لهذه المشكلة هو إعادة ترجمة وضع الإصدار. (وهذا أمر مؤسف إذا كنت تستخدم وضع التصحيح لتوفير تقارير استثناء مفصل في بيئات الإنتاج.)

http://support.microsoft.com/؟kbid=919481.

مهندس كمبيوتر معتز

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