内存快照触发dotMemory中的垃圾回收

8
我正在使用dotMemory来分析在IIS上运行的asp.net mvc应用程序。
我怀疑'获取快照'会导致GC gen2运行。为什么呢? 这是图片: Snapshot causes gc 问题是:这是正常行为吗?为什么我不能得到显示所有未被GC收集的快照?每次我获取快照时,内存使用量都会下降。
2个回答

9

是的,这是正常行为,因为在获取快照之前会执行完整的垃圾回收。如果您看到内存使用量在获取快照时下降,那就是一个好兆头。

垃圾收集器只有在存在内存压力时才会清理内存。如果您想检查内存泄漏,必须执行完整的垃圾回收并获取快照。如果仍有残留物,则表示存在内存泄漏。

通常情况下,您应该首先获取一个干净的基础快照,然后在执行要测试的功能后再获取另一个干净的快照,然后比较这两个快照。


3
这是不可配置的吗?我只是想看到大对象堆中的对象排列情况。但这些对象只存活了很短的时间,所以在垃圾回收后只剩下1-2个对象。现在我明白为什么 dotMemory 要进行 GC 了,感谢您的回答!但在我的情况下,我想看到应用程序在现实生活中的运行情况,当 GC 不那么频繁时。 - VorobeY1326
2
@VorobeY1326:我怀疑你无法在不拍摄快照的情况下查看内存映射。但是,如果您能以GC无法释放的方式持有对这些对象的引用,那么您将能够在LOH中看到它。 - CharithJ
1
每个DotMemory快照都有一个“内存流量”链接。它允许您查看即使在已收集对象上的内存分配和收集。 - Joseph Evensen

2

微软的分析API运作方式如下,dotMemory启动垃圾回收并在GC期间收集对象图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接