在之前的系列中:
OutOfMemoryException, stack size is huge, large number of threads
我有一个耗费大量内存的.net Windows服务。 GC堆不大。堆栈大小也不大。什么是大的东西称为私人数据。我还可以在任务管理器中看到我的应用程序消耗了很多taskmanager称之为句柄的东西。我的应用程序消耗2326个句柄。我相信这些句柄是一些占用私人数据的窗口句柄。我可以看到这个私有数据被占用了 标记为线程环境块的块。那是什么?
Screenshot of my application memory usage by VMMap
Screenshot of my application memory usage by Task Manager
更新
我运行ProcessExplorer。我现在有两个服务运行实例。 我可以看到他们为Gen2 GC消耗了大量的虚拟内存。这看起来很可疑。 对于GC Heap大小保留的总数对于两个进程也是相同的。
答案 0 :(得分:2)
当无法收集新创建的对象时,似乎您有经典的内存泄漏,因为它们是从垃圾收集根引用的。
摆脱此类问题的最有效方法 - 使用WinDBG + SOS和!gcroot命令。可以在此处找到内存泄漏错误调查的示例:http://blogs.msdn.com/tess/archive/2008/04/03/net-debugging-demos-lab-7-memory-leak-review.aspx
祝你好运!答案 1 :(得分:1)
是的,非常耗费资源。我猜你用[ThreadStatic]属性标记的变量。你有方式太多线程。