OutOfMemoryException,堆栈大小很大,线程数量很大

时间:2010-03-30 08:05:20

标签: c# .net wcf multithreading memory-leaks

我正在分析我的.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()  

1 个答案:

答案 0 :(得分:3)

您可以使用调试器查看程序 - 然后您可以看到所有这些线程正在做什么(大多数可能有一个非常相似的调用堆栈)。