在Visual Studio 2017中,当您选择“获取快照”时,使用诊断工具可以在收集快照数据之前自动运行GC吗?
我尝试了一些经验测试,方法是在消息处理循环中的一个断点处停止,获取快照,然后在即时窗口中发出GC.Collect(),然后获取另一个快照并进行比较。在两次大约20次尝试中,我看到了快照的差异。
拍摄快照时,它不会在“进程内存”窗口中显示GC标记。当我通过即时窗口发布GC.Collect()时,它确实显示了GC标记。
我希望快照永远不会不同,这意味着GC实际上是在聚集快照数据之前发生的,或者几乎每次暗示不首先执行GC时它都会不同。
在我使用过的ANTS和其他探查器中,它们似乎很清楚,GC是在快照收集之前首先运行的,这样比较不会因未引用和未收集的堆对象而产生偏差。
但是在这种情况下,我无法轻松验证,并且文档也没有提到任何一种方式。