c# - OutOfMemoryException,堆栈大小巨大,线程数量大

标签 c# .net wcf multithreading memory-leaks

我正在分析我的 .net windows 服务。 我试图发现 OutOfMemoryException 并发现我的堆栈大小 是巨大的并且正在增长,因为线程数量不断增长。

每个线程在 Windows x64 计算机上获得1024 KB。因此,当我的应用程序有 754 线程时,堆栈大小将为 772 MB。对我来说,问题是我不知道这些线程来自哪里。最初,我的应用程序的线程数量非常有限,并且它们随着时间的推移而不断增长。

我有两个怀疑 - 这些线程要么是由 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()  

最佳答案

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

关于c# - OutOfMemoryException,堆栈大小巨大,线程数量大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2543648/

相关文章:

.net - InstanceContextMode.Single 可用于 WCF basicHttpBinding 吗?

c# - EF6 一对多流畅映射

c# - 我可以以编程方式将链接按钮添加到 gridview 吗?

wcf - 使用 DataContractSerializer 序列化子类实例的实用方法是什么?

wcf - 对 WCF 身份 dns 值感到困惑

c# - 从 C#.NET 调用 AutoCAD 命令

c# - .Net 互斥问题

c# - 学习 WinForms 值得吗?它过时了吗?

c# - 在 BuildServiceProvider 之前访问服务

c# - 加载多种消息类型的设计模式