在上一系列中:
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保留的总堆大小对于两个进程也是相同的。
发布于 2010-03-31 19:23:14
当新创建的对象被垃圾收集根引用而不能被收集时,似乎存在典型的内存泄漏。
解决此类问题的最有效方法是使用WinDBG + SOS和!gcroot命令。内存泄漏错误调查的示例可以在这里找到:http://blogs.msdn.com/tess/archive/2008/04/03/net-debugging-demos-lab-7-memory-leak-review.aspx
祝好运!
发布于 2010-03-31 18:25:34
是的,非常耗费资源。我猜是您用ThreadStatic属性标记的变量。你的线程太多了。
https://stackoverflow.com/questions/2551771
复制相似问题