2010-04-02 30 views
7

Tôi đã từng chơi với GC.GetTotalMemory(). Khi tôi tạo một biến cục bộ của các kiểu tiêu đề trong ví dụ dưới đây, lượng bộ nhớ tiêu thụ tăng lên 6276 byte. Những gì đang xảy ra ở đây?Tại sao GC.GetTotalMemory() báo cáo phân bổ bộ nhớ lớn?

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 có vẻ như một nét kỳ lạ của "khổng lồ" – jalf

+1

Nó sẽ không ngạc nhiên nếu 'Console.WriteLine (...)' cấp phát bộ nhớ . – bendin

+2

6KB là "rất lớn" bởi vì những gì người ta mong đợi là tăng chính xác 0 byte. –

Trả lời

9

Tôi nghĩ đó là do người cấp phát ở đâu đó cắn một phần lớn bộ nhớ. Nó sẽ sử dụng nó cho nhiều hơn một đối tượng. Hãy thử làm:

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

và xem điều gì xảy ra.

đây là những gì tôi thấy, và GetTotalMemory() không phải là quá ngây thơ:

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

kết quả đầu ra:

12828 
19484 

và điều này:

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

kết quả đầu ra:

12828 
19484 

thực sự bạn không nên chú ý đến biến động nhỏ của bộ nhớ miễn phí:

Sau đó phán ông cùng họ rằng: Render do đó cho đến Caesar những điều mà là Caesar; và Đức Chúa Trời những điều mà Thiên Chúa

:)

Các vấn đề liên quan