Задать вопрос

Почему потоки накапливаются и не уничтожаются?

Всем привет!
Столкнулись с такой проблемой: по мере работы .net 6.0 сервис, запущенный как Windows-служба, отъедает на машине все больше и больше потоков (см. Task Manager, колонка Threads) и не убивает их. Web API приложения обслуживает много несложных запросов. Вроде бы ничего некорректного в коде нет: много где внутренние сервисы вызываются через DI, using, применяются финализаторы, сборка мусора и т.п. Но периодически кол-во потоков начинает зашкаливать и вообще непонятно, куда смотреть.
Показатель Process.GetCurrentProcess().Threads.Count действительно очень большой.
Методы типа ThreadPool.SetMaxThreads() ничего не дают ((
В какую сторону смотреть?
Help!
  • Вопрос задан
  • 1115 просмотров
Подписаться 4 Средний 2 комментария
Решения вопроса 2
Griboks
@Griboks Куратор тега C#
Возможно, у вас не отрабатывает сборка (если отбросить ошибки в коде). Существует редкая ошибка утечки памяти, когда контекст переменной != контекст сборки мусора. Попробуйте избавиться от создания объектов внутри циклов и условий, а перенести всё это в отдельные функции.
Ответ написан
Комментировать
@none7
Принудительную сборку мусора через GC.Collect() пробовали применять? Если не помогает, значит, где-то остались ссылки и есть утечка памяти, иначе Dispose вызывается не везде в Вашем коде.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
Смотреть в сторону разницы: Process.GetCurrentProcess().Threads.Count и ThreadPool.ThreadCount
Скорее всего какой-то сервис создает множество потоков (ручных) и держит ссылки на них, т.к. поток это объект ядра и он должен быть уничтожен когда на него перестают ссылаться, либо это просто поток, который не завершатся (while (true) какой-нибудь)
Ответ написан
mindtester
@mindtester Куратор тега Windows
http://iczin.su/hexagram_48
любой прототип процесса можно дебажить как консоль (или множество)..
отладчик в руки!

ps а так то утечка... вопрос чего? ;))

pps отладочные записи в лог файлы, или в журнал.. ну это уже для процесса.
для консолей - консоль и сила в отладке ))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы