我正在分析我的.net Windows服务。 我试图发现OutOfMemoryException并发现我的堆栈大小 是巨大的,并且正在增长,因为线程的数量不断增长。
每个帖子在Windows x64计算机上都 1024 KB 。因此,当我的应用程序具有 754 线程时,堆栈大小将 772 MB 。对我来说问题是我不知道这些线程来自哪里。最初我的应用程序的线程数量非常有限,并且随着时间的推移不断增长。
我有两个怀疑 - 这些线程是由WCF或数据库连接创建的。
我的应用程序使用WCF和数据集。此外,我试图在蚂蚁做跟踪我的应用程序,我可以看到大量的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()
答案 0 :(得分:3)
您可以使用调试器查看程序 - 然后您可以看到所有这些线程正在做什么(大多数可能有一个非常相似的调用堆栈)。