2010-04-02 4 views
7

J'ai joué avec GC.GetTotalMemory(). Lorsque je crée une variable locale de type Titres dans l'exemple ci-dessous, la quantité de mémoire consommée augmente de 6276 octets. Que se passe t-il ici?Pourquoi GC.GetTotalMemory() rapporte-t-il d'énormes allocations de mémoire?

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 semble une étrange définition de « énorme » – jalf

+1

Il ne me surprendrait pas si 'Console.WriteLine (...)' alloue de la mémoire . – bendin

+2

6KB est "énorme" car on s'attend à une augmentation de 0 octet exactement. –

Répondre

9

Je pense que c'est parce que allocator quelque part mord un gros morceau de mémoire. Il l'utilisera pour plus d'un objet. Essayez de faire:

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

et voir ce qui se passe.

ici est ce que je vois, et GetTotalMemory() n'est pas si innocent:

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

sorties:

12828 
19484 

et ce:

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

sorties:

12828 
19484 

en fait vous ne devriez pas prêter attention aux petites fluctuations de mémoire libre:

Puis il dit à eux, rendu donc à César ce qui est à César ; et à Dieu ce qui est à Dieu

:)

Questions connexes