Ручка утечки с помощью системы .NET.Threading.thread Class

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

Вопрос

У меня проблема, что количество ручек в моем приложении постоянно растет. Я сделал отладку и узнал, что это вызвано 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 освободит ручки на следующей коллекции.

В вашем случае не похоже, что нить когда-либо закончится.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top