2010-04-02 96 views
7

我一直在玩GC.GetTotalMemory()。当我在下面的例子中创建一个标题类型的局部变量时,所消耗的内存量增加了6276字节。这里发生了什么?GC.GetTotalMemory()为什么报告大量的内存分配?

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); 
    } 
} 
+2

6KB看起来的“庞大” – jalf 2010-04-02 11:26:03

+1

一个奇怪的定义,如果'Console.WriteLine(...)'分配内存,它不会让我感到吃惊。 – bendin 2010-04-02 11:26:05

+2

6KB是“巨大的”,因为人们期望的是正好增加0字节。 – 2010-04-02 11:35:02

回答

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 

其实你不应该注意的可用内存波动小:

于是耶稣说,渲染 因此凯撒的东西 是凯撒的;和对神的事 是上帝的

:)

相关问题