无法在VS 2015内存使用情况分析器

时间:2015-11-23 14:58:00

标签: c# visual-studio-2015 clrprofiler debug-diagnostic-tool

我有以下简单程序,我尝试使用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的工具中看到这些信息......我显然错过了一些东西......有人能指出我正确的方向吗?

enter image description here

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

  • 我在visual studio中使用Start Diagnostic Tools Without Debugging
  • 拍摄并打开快照后,我甚至取消选择Collapse small objects选项,看看是否隐藏了任何信息,但这也无济于事。

更新(回复用户回答): 我使用dotMemory版本4.4。以下是我从中获取的数据的快照。注意:确保在看到Collect Allocations消息后点击任意键之前单击按钮Begin

enter image description here

1 个答案:

答案 0 :(得分:2)

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