为什么GC.GetTotalMemory()报告巨大的内存分配?

时间:2010-04-02 11:21:06

标签: c# .net

我一直在玩GC.GetTotalMemory()。当我在下面的示例中创建一个类型为Titles的局部变量时,消耗的内存量增加了6276个字节。这是怎么回事?

class Program
{
    enum Titles { Mr, Ms, Mrs, Dr };

    static void Main(string[] args)
    {
        GetTotalMemory();
        Titles t = Titles.Dr;
        GetTotalMemory();
    }

    static void GetTotalMemory()
    {
        long bytes = GC.GetTotalMemory(true);
        Console.WriteLine("{0}", bytes);
    }
}

1 个答案:

答案 0 :(得分:9)

我认为这是因为分配器在某处占据了很大一部分内存。它将它用于多个对象。尝试做:

GetTotalMemory();
Titles t = Titles.Dr;
GetTotalMemory();
Titles t2 = Titles.Mr;
GetTotalMemory();

看看会发生什么。

这就是我所看到的,而GetTotalMemory()并不是那么无辜:

    GetTotalMemory();
    Titles t = Titles.Dr;            
    GetTotalMemory();

输出:

12828
19484

和此:

GetTotalMemory();
//Titles t = Titles.Dr;            
GetTotalMemory();

输出:

12828
19484

实际上你不应该注意自由记忆的微小波动:

  

然后他对他们说,渲染   因此凯撒的东西   是凯撒的;这些东西都归于上帝   那是上帝的

:)