OutOfMemoryException, размер стека огромен, большое количество потоков

Я профилировал мой сервис Windows.net. Я пытался обнаружить OutOfMemoryException и обнаружил, что мой размер стека огромен и растет, потому что количество потоков продолжает расти.

Каждый поток получает 1024 КБ на компьютере с Windows x64. Таким образом, когда мое приложение имеет 754 потока, размер стека будет 772 МБ. Проблема для меня в том, что я не знаю, откуда взялись эти темы. Изначально в моем приложении очень ограниченное количество потоков, и они со временем растут.

У меня есть два подозрения - либо эти потоки создаются WCF или подключением к базе данных. Мое приложение использует как WCF, так и наборы данных. Также я попытался профилировать свое приложение в Ants do Trace, я могу видеть большое количество System.ServiceModel.Channels.ClientReliableDuplexSessionChannelи это число увеличивается со временем. Я вижу тысячи таких созданных объектов. Итак, я хочу знать, кто создает потоки (инструменты для обнаружения, профилировщики) и создает ли эти потоки WCF.

ОБНОВИТЬ

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

ntdll.dll!7c82860c()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
ntdll.dll!7c827d99()    
kernel32.dll!77e4e02f()     
mscorwks.dll!79e7c7a8()     
mscorwks.dll!79f943fe()     
mscorwks.dll!79f94237()     
mscorlib.ni.dll!792f5577()  
mscorlib.ni.dll!792e01c5()  

1 ответ

Решение

Вы можете посмотреть на программу с помощью отладчика - тогда вы сможете увидеть, что делают все эти потоки (большинство из них, вероятно, имеют очень похожий стек вызовов).

Другие вопросы по тегам