Я профилировал свою службу Windows .net.
Я пытался обнаружить OutOfMemoryException и обнаружил, что мой размер стека
огромен и растет, потому что количество потоков продолжает расти.
Каждый поток получает 1024 КБ на компьютере с Windows x64. Таким образом, когда мое приложение имеет 754 потоков, размер стека будет 772 МБ . Проблема для меня в том, что я не знаю, откуда взялись эти темы. Изначально у моего приложения было очень ограниченное количество потоков, и они со временем продолжают расти.
У меня есть два подозрения - эти потоки создаются WCF или подключением к базе данных.
Мое приложение использует как WCF, так и наборы данных. Также я попытался профилировать свое приложение в Ants do Trace, я вижу большое количество System.ServiceModel.Channels.ClientReliableDuplexSessionChannel
и это число увеличивается со временем. Я вижу тысячи созданных объектов. Поэтому я хочу знать, кто создает потоки (инструменты для обнаружения, профилировщики) и создает ли эти потоки WCF.
UPDATE
Я остановился в отладчике моего приложения, чтобы посмотреть на потоки. Все, что я вижу, это большое количество потоков 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()