Dav*_*son 7 .net c# debugging memory-leaks windbg
我的.NET应用程序中存在内存问题,在初始化和加载所有内容之后,我的应用程序开始在Gen2堆中消耗大约1GB.它随着时间的推移(4-5小时)慢慢消耗Gen2堆中的4GB.我已经使用WinDbg来分析我看到的一些对象类型(和相关的内存使用)正在增加的事情.
实例中增长的所有对象(和mem用法)都由相同的父对象类型引用.此父对象类型有大约3900个实例 - 这永远不会更改.不知何故,我正在将子对象添加到其中一些父实例中,但我没有很好的方法来查看正在添加的3900个实例中的哪一个.
!DumpHeap -mt会显示我所有的父类型,但大小都是一样的,因为它不计算孩子.
!ObjSize也将计算子项的大小,但一次只能获取一个参数(或所有类型的所有对象 - 不仅仅是我的父类型 - 这是太多的对象)
查看子对象并将它们追溯到父对象也没有用,因为有几百万种这样的类型,我看不到某种聚合跟踪的方法.
像CLRProfiler和ANTS这样的工具会使我的app太慢(ANTS不那么频繁),以便在任何合理的时间内解决问题.
我已经尝试使用它通常运行的一小部分数据来运行我的应用程序,以便使调试更容易,但我不会在这里遇到内存问题.我认为在我的整个数据集中存在一些引起奇怪事情的边缘情况,但我不知道这些边缘情况是什么,以便将它们隔离成我的整个数据集的子集.
已经广泛阅读并且看不到任何人建议做什么时Gen2中的大量物体应该存在并且少量相同类型的物体不断增加.
任何提示将非常感激.
有趣的谜题。如您所知,当对象在集合中幸存下来时,它们会被提升到第 2 代,因为它们被长期存在的对象所引用。您没有说这是什么类型的应用程序 - asp.net、WPF、winforms 等,因此我们必须做出一些猜测。
您可以尝试的一种策略是记录。您说有 3900 个“父对象”实例正在添加某些内容 - 您可以在接受新对象的父对象上检测该方法吗?也许通过记录这些添加内容,您可以了解它们的来源。
| 归档时间: |
|
| 查看次数: |
4756 次 |
| 最近记录: |