2010-04-02 4 views
7

저는 GC.GetTotalMemory()로 놀아 왔습니다. 아래 예제에서 Titles 유형의 로컬 변수를 만들면 메모리 사용량이 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

6킬로바이트는 – jalf

+1

"큰"이상한 정의처럼'Console.WriteLine는 (...)'메모리를 할당하는 경우 그것은 나를 놀라게하지 않을 것 . – bendin

+2

6KB는 정확하게 "0"바이트가 증가하기 때문에 "거대한"바이트입니다. –

답변

9

할당자는 어딘가에 큰 메모리를 물고 있기 때문이라고 생각합니다. 둘 이상의 오브젝트에 대해이를 사용합니다. 다음을 시도하십시오.

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

그리고 어떻게되는지보십시오.

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

출력 :

12828 
19484 

이 :

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

출력 :

여기

제가보고, GetTotalMemory()가 너무 무고한 아닌 무엇
12828 
19484 

가 실제로 사용 가능한 메모리의 작은 변동에주의를 지불하지해야합니다

그런 다음 그들에게 고 하노라, 렌더링 따라서 카이사르에게 카이사르의있는 것들; 하나님에게있는 것을 하나님의

:

관련 문제