2010-04-02 9 views
7

He estado jugando con GC.GetTotalMemory(). Cuando creo una variable local de tipo Títulos en el ejemplo a continuación, la cantidad consumida de memoria aumenta en 6276 bytes. ¿Que está pasando aqui?¿Por qué GC.GetTotalMemory() informa grandes asignaciones de memoria?

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

6 KB parece una extraña definición de "enorme" – jalf

+1

No me sorprendería que 'Console.WriteLine (...)' asigna memoria . – bendin

+2

6KB es "enorme" porque lo que uno espera es un aumento de exactamente 0 bytes. –

Respuesta

9

Creo que es porque allocator en alguna parte muerde una gran parte de la memoria. Lo usará para más de un objeto. Intente hacer:

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

y vea qué ocurre.

Esto es lo que veo, y GetTotalMemory() no es tan inocente:

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

salidas:

12828 
19484 

Y esto:

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

salidas:

12828 
19484 

realidad no se debe prestar atención a las pequeñas fluctuaciones de memoria libre:

Y les dijo: Dad, pues, a César lo que es del César ; y Dios lo que es de Dios

:)

Cuestiones relacionadas