كيف يمكنني معرفة ما إذا كان الرمز المدارة الخاص بي يتسرب من الذاكرة بسبب مكالمات المكتبة الأصلية؟
-
05-07-2019 - |
سؤال
لدي DLL مُدار يدعو إلى مكتبة أصلية. هذه المكتبة الأصلية تُرجع عمومًا IntPtrs. يمكن نقلها إلى طرق أخرى في المكتبة الأصلية للقيام بالأشياء ، أو إخبار المكتبة بتحرير المثيل المرتبط بـ INTPTR. ولكن فقط بعض الحالات التي تحتاج إلى إطلاق سراحها بهذه الطريقة ، تتم إدارة البعض الآخر من قبل المكتبة. المشكلة هي أن الوثائق ليست واضحة دائمًا حول الحالات التي يجب تحريرها وأيها يجب ألا.
ما أريد معرفته هو ما إذا كانت هناك طريقة يمكنني من خلالها معرفة ما إذا كان الكود قد احتفظ بالإشارات إلى أي من المؤشرات التي يجب تحريرها ، وبالتالي تسبب في تسرب الذاكرة؟
المحلول
أسهل طريقة ربما لاستخدام البروفيلر للذاكرة. قامت Google السريعة بإعداد رابط إلى ميمبروفيلر. لقد استخدمت هذا مرة واحدة (كتجربة) وتمكنت من العثور على أماكن لم أكن أتخلص فيها من الدليل بشكل صحيح. أنا متأكد من وجود آخرين ، بما في ذلك هذا واحد بواسطة Redgate.
نصائح أخرى
قد ترغب في التفكير في استخدام SafeHandles لالتفاف المقابض التي تم إرجاعها من الكود الأصلي. يوفر بعض القيمة الإضافية على intptr.