Ручка утечки с помощью системы .NET.Threading.thread Class
-
04-10-2019 - |
Вопрос
У меня проблема, что количество ручек в моем приложении постоянно растет. Я сделал отладку и узнал, что это вызвано System.threading.thread Class, который используется для некоторой рутины. Чтобы упростить отладку, я создал образец .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 Class. Проблема в том, что это выглядит как нить не освобождает ручек, потому что каждый щелчок приводит к количеству ручек, растущих ~ 5.
Вопрос в том, как я могу вручную освободить все ручки, созданные System.threading.thread Class?
Заранее спасибо.
Решение
Он на самом деле не протекает ручки, это просто, что GC еще не собрал их. Попробуйте изменить код в обработчике кнопок, так что он циклирует и создает 500 потоков или что-то и попробуйте нажать на него несколько раз, и вы, вероятно, увидите, как собранные ручки.
Другие советы
Вам не нужно вручную освободить свои поток ручек, просто бросая все ссылки на ваш Thread
экземпляр должен быть достаточно. Учитывая, что нить больше не работает, и все ссылки на него удалены, коллектор Gargabe освободит ручки на следующей коллекции.
В вашем случае не похоже, что нить когда-либо закончится.