Обработка утечек с помощью класса .NET System.Threading.Thread - PullRequest
0 голосов
/ 24 мая 2010

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

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 10 сентября 2010
1 голос
/ 24 мая 2010

Вам не нужно вручную освобождать дескрипторы потоков, достаточно просто удалить все ссылки на ваш экземпляр Thread. Поскольку поток больше не работает и все ссылки на него удалены, сборщик gargabe освободит дескрипторы для следующей коллекции.

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

1 голос
/ 24 мая 2010

На самом деле это не утечка ручек, просто GC еще не собрал их. Попробуйте изменить код в обработчике кнопок, чтобы он зацикливался и создавал 500 потоков или что-то в этом роде, и попробуйте нажать его несколько раз, и вы, вероятно, увидите, что собираемые дескрипторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...