LOH分析说,GC根对象(System.Object)是内存泄漏的来源
||
我有一个经常叫的“ 0”字。它使用ѭ1来完成其任务。
该Web应用程序的使用内存增加了2%(有一个单独的应用程序池)。我用了3英镑,那里有很多可用内存(LOH)。
ANTS
表示这些是GC root
对象。我检查了我的代码,发现有一些int
和string
不会导致LOH
!
我跟踪了泄漏源,但不幸的是泄漏类型为System.Object
,并且具有很多null
属性。还有一个LinkedList
,一些HashTable
和一个WeakHashTable
。
如何找到该对象并修复fix8ѭ?将ѭ0的ѭ16退还ѭ15呢?
没有找到相关结果
已邀请:
1 个回复
诉嘎归亮
这将为您提供内存中所有当前“活动”对象的格式良好的视图,以及其中有多少个对象,它们占用了多少字节(按对象类型分组)。 现在,大对象堆(LOH)-通常,当对象被垃圾收集时,就会发生压缩,就像对硬盘驱动器进行碎片整理一样。这样可以快速有效地分配新对象。问题是,大型物体不容易压缩-一切都必须四处移动以适应它们。因此,占用超过85000字节的任何内容都被卡在一个称为“大对象堆”的特殊位置。这个堆没有被压缩,所以随着时间的流逝,很像硬盘驱动器,会发生碎片,在堆中留下未使用的间隙,这导致运行时需要更多空间,等等。 因此,让我们问问windbg告诉我们LOH中的内容:
这将向您显示大对象堆中的实际内容-其中一些对象可能会直接跳到您的身旁,例如List或MyClass []。 重要提示:如果您在大型对象堆中看到的东西是故意长期存在的(例如,像记录器的静态实例),则可能并不是真正的问题。您确实想尽量减少其中的短暂/经常创建的对象的数量,以减少碎片。 因此,我建议您进行SOS探索的备忘单: http://windbg.info/doc/1-common-cmds.html http://windbg.info/doc/2-windbg-a-z.html 有趣的命令:
但我一直以来最喜欢的是:
这将在CLR在大对象堆上分配对象时在实际内部调用上设置一个断点,当该对象被命中时,将转出完整的堆栈跟踪,然后继续。