无法在 VS 2015 内存使用分析器中找到预期的对象

Unable to find expected objects in VS 2015 memory usage profiler

我有以下简单程序,我正尝试将其与 VS 2015 的内存使用相关诊断工具一起使用。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Begin");
        Console.ReadLine();
        Goo();
        Console.WriteLine("End");
        Console.ReadLine();
    }

    private static void Goo()
    {
        var list = new List<string>();
        for (var i = 0; i < 1000; i++)
        {
            Foo(list);
        }
    }

    private static void Foo(IEnumerable<string> strings)
    {
        foreach (var str in strings)
        {

        }
    }
}

在分析此应用程序的项目时,我拍摄了几张快照,并期待看到 1000 盒装 List<string>+Enumerator 对象。例如,我在 JetBrains 的 dotMemory 产品中获得了此类信息。但出于某种原因,我无法在 VS 的工具中看到此信息......我显然遗漏了一些东西......任何人都可以指出我正确的方向吗?

正如您在上面的快照中看到的,我只在没有看到有关我正在执行的程序的任何信息的地方获得有关 mscorlib 模块的信息。我错过了什么?...以下更多信息:

已更新(响应用户回答): 我正在使用 dotMemory 4.4 版。以下是我从中获得的数据的快照。注意:确保在看到 Begin 消息

后点击任意键之前点击按钮 Collect Allocations

当您在 "End" 点获取快照时,在 Goo 和 Foo 中创建的所有对象都已收集。我使用 dotMemory 10.0.1 分析了这段代码,也没有看到在 Goo 和 Foo 方法中创建的任何对象。

更新: 在 dotMemory 中,您正在查看 "Memory Traffic" 视图。 Memory traffic - are objects created and possible already collected to the point of time. dotMemory shows you a warning that it is not able to display collected objects. If you check "Start collecting allocation data immediatelly" checkbox 在分析设置对话框中,dotMemory 将向您显示这 1000 个对象已分配并已收集。在 VS 诊断工具中,您正在查看 实时 对象图。我对这个工具不是很熟悉,但是好像没有关于内存流量的信息。

如果您查看 dotMemory ("All objects" view) 中的活动对象图,您也不会找到这些对象。

内存分析工具通过迭代所有 GC 根并从那里遍历对象图来工作 - 类似于 GC 所做的。一旦方法超出范围,包含枚举数的局部变量就不再是 GC 根。任何其引用存储在本地且未通过另一个 GC 根引用的堆对象都无法访问,并且在那时基本上消失了。