2012-06-23 10 views
5

Klasa składa się zwykle z zmiennych członkowskich metod: &. Kiedy tworzymy instancję klasy, pamięć jest alokowana dla zmiennych członkowskich klasy. Czy metody członkowskie również zajmują pamięć? Gdzie są przechowywane te metody?Czy członkowie klasy zajmują pamięć?

+5

Wdrożenia metod zajmują pamięć według typu (i myślę, że jest to udoskonalenie za pomocą generycznych?), Ale to * nie * zwiększa na instancję obiektu. Na przykład. 'obj.GetType()' zwraca typ reprezentujący wymienione metody (i wiele innych rzeczy). Zmienne (instancja) * są oczywiście pojedynczymi instancjami. –

+0

@ pst, po tak dobrej odpowiedzi jako komentarz? –

+0

@AlexeiLevenkov robi dobry punkt. Zdecydowanie głosowałbym na to i sam odpowiedziałem na to pytanie, z czym uważam całkiem przyzwoitą odpowiedź. –

Odpowiedz

3

że mamy następujące klasy:

public class Person 
{ 
    public string Name { get; set; } 

    public Person(string name) 
    { 
     Name = name; 
    } 

    public string SayName() 
    { 
     string hello = "Hello! My name is "; 
     return hello + name; 
    } 
} 

Person p = new Person("John"); 
string yourName = p.SayName(); 

Funkcja SayName() idzie na Call Stack i przedmiot Person p i jego właściwości (Name) pozostanie w pamięci, aż Garbage Collection przychodzi i czyści go.

Pod względem pamięci powinieneś bardziej zainteresować się polami instancji (właściwościami) obiektu, ilością obiektów, z którymi masz do czynienia, a także, jeśli Twój obiekt ma jakiś czas Reader lub Connection. Jeśli Twój obiekt to Reader lub Connection, musisz wziąć pod uwagę instrukcję using.

Pseudo-kod:

using(DatabaseConnection dbConn = new DatabaseConnection() 
{ 
    // Process your calls and data 
} 
// The object is Disposable and it's resources are cleared 
+0

"Zmienne wewnątrz SayName(), które cześć, pozostaniesz w pamięci tylko wtedy, gdy funkcja jest w zasięgu, więc gdy funkcja się zakończy, zmienna nie będzie już w pamięci. " Nie do końca prawda, GC może je zebrać, gdy tylko odniesienie nie będzie już potrzebne (i obejmuje to "ten"!) – porges

+0

Tak. To prawda. Sądzę, że powinienem był uczynić to bardziej jasnym pod względem dostępu. –

+2

"jakiś czas [sic] z' Reader' lub 'Connection'" - po prostu generalizacja do 'IDisposable' jest prawdopodobnie bardziej przejrzysta, IMO –

0

Klasa jest po prostu niebieski wydruku, nie zajmuje żadnego miejsca tak długo, jak zmienna klasy typu nie został zdefiniowany. Po zdefiniowaniu obiektu/instancji klasy typów członek klasy zajmie trochę miejsca w pamięci. Rozmiar instancji jest równy sumie rozmiaru członków zdefiniowanych w klasie.

Powiązane problemy