0

我在 IIS7 上托管了一个 asp.net(v4.0.30319) 应用程序,并使用以下 WinDBG 命令找到这么多对象未被 GC 释放。

!dumpheap -type XXXX
000000....   671  246928 XXXX

XXXX为物件类型名称,物件数量增加10+/M。但是当我使用 ANTS Memoery Prfiler 8 时找不到任何增加。当我使用 Windows 性能监视器时找不到任何内存泄漏。所以我非常怀疑这是 WinDBG 的问题还是应用了 .get 延迟 GC 模式?

有没有机构可以给我建议?

非常感谢。

加里

4

1 回答 1

1

不完全是答案,但评论太长了

ANTS 内存分析器将进行垃圾收集以避免误报。WinDbg 只是提供了 .NET 堆上当前情况的视图,因此垃圾收集器可能没有运行。

您比较了多少个 WinDbg 快照?这个数字是只会增加还是有时也会减少?

对象在哪一代垃圾回收中?使用查找起始地址

!eeheap -gc

接着

!dumpheap -stat -type XXXX <gc_generation_start_address>

对于不同的世代。如果您在第 2 代中有很多对象,那么它们将不再被如此频繁地收集。

对象是植根的还是垃圾回收的候选对象?尝试

!gcroot <object address>
于 2014-03-10T11:07:54.307 回答