التعامل مع التسريبات مع .NET System.Threading.Thread فئة
-
04-10-2019 - |
سؤال
لدي مشكلة في أن عدد المقابض في تطبيقي ينمو باستمرار. فعلت تصحيح الأخطاء وأدرك أن هذا ناتج عن System.Threading.Thread فئة المستخدمة في بعض الروتين. لتبسيط تصحيح الأخطاء لقد قمت بإنشاء نموذج .NET:
...
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(DoWork);
t.Start();
}
public void DoWork(object parameter)
{
// Do something...
}
...
في كل مرة أقوم بالنقر فوق الزر ، يتم إنشاء مؤشر ترابط باستخدام فئة System.Threading.Thread. المشكلة هي أن الخيط لا يحرر المقابض لأن كل نقرة تسبب عدد من المقابض ينمو بمقدار 5 ~.
والسؤال هو: كيف يمكنني تحرير جميع المقابض التي أنشأتها System.Threading.Thread؟
شكرا مقدما.
المحلول
إنه في الواقع لا يتسرب من المقابض ، إنه مجرد أن GC لم يجمعها بعد. حاول تغيير الكود في معالج الأزرار بحيث يحلق وإنشاء 500 موضوع أو شيء ما ومحاولة الضغط عليه عدة مرات وربما ترى مقابض يتم جمعها.
نصائح أخرى
لا تحتاج إلى تحرير مقابض خيطك يدويًا ، ما عليك سوى إسقاط جميع الإشارات إلى Thread
يجب أن يكون الحالة كافية. بالنظر إلى أن الخيط لم يعد قيد التشغيل وإزالة جميع الإشارات إليه ، فإن جامع Gargabe سيحرر المقابض في المجموعة التالية.
في حالتك ، لا يبدو أن الخيط سينتهي على الإطلاق.