Erstellen neuer Objekte wiederholt für dieselbe Variable

8

Ich nehme an, das ist eine sehr dumme Frage, aber ich habe mich umgesehen und konnte keine Antworten auf die folgenden Fragen finden. Schätze wirklich die Antworten, die das beleuchten.

1) Was passiert mit dem vorherigen Objekt, wenn ein neues innerhalb derselben Methode instanziiert wird? Beispiel:

%Vor%

2) Gleiche Frage wie (1), aber auf statische Variable. Beispiel:

%Vor%

Danke!

    
csharp101 19.04.2013, 16:34
quelle

3 Antworten

11
  

// Wird das zuvor erstellte Objekt zerstört und Speicher freigegeben?

Möglicherweise. Sobald Sie dies tun, werden Sie keinen Bezug mehr auf das ursprüngliche DataTable haben. Solange nichts anderes auf dieses Objekt verweist, wird es für die Garbage Collection geeignet. Irgendwann danach wird der GC ausgeführt und sammelt das Objekt, das wiederum seinen Speicher freigibt.

Dies gilt für statische, Instanz- und lokale Variablen. Der Mechanismus ist in allen diesen Skalen identisch.

Beachten Sie, dass wenn das Objekt, das Sie referenzieren, IDisposable implementiert, es ratsam ist, Dispose() vor dem Verlust der Referenz aufzurufen. Technisch gesehen wird eine korrekt implementierte IDisposable -Implementierung schließlich die Dinge richtig behandeln, aber native Ressourcen können bis zur GC-Sammlung gebunden sein, was möglicherweise nicht schnell geschieht. Beachten Sie, dass dies nichts mit (verwaltetem) Speicher zu tun hat, sondern immer noch eine gute Vorgehensweise ist.

Das heißt, Ihr erstes Beispiel ist eine schlechte Übung. Während der Speicher (eventuell) aufgeräumt wird, führen Sie zusätzliche Zuweisungen durch, die keinen Zweck erfüllen, daher ist es besser, die Variable nicht doppelt zuzuordnen.

    
Reed Copsey 19.04.2013, 16:37
quelle
2

Die kurze Antwort lautet, dass all dies vom Garbage Collector übernommen wird. Die Instanzen werden nicht sofort gelöscht, aber sie werden als "nicht erreichbar" markiert und zu einem späteren Zeitpunkt freigegeben.

Ich schlage vor, den Artikel Garbage Collection auf MSDN

gelesen zu haben     
rejj 19.04.2013 16:37
quelle
1

Objekte sind Referenzvariablen in C #. Das bedeutet, dass sie Speicherreferenzen in ihnen speichern.

Wenn Sie also ein Objekt neu zuweisen, überschreiben Sie einfach den früheren Wert (Speicherreferenz), den es enthielt. Und der frühere Wert ist jetzt für die Garbage Collection qualifiziert. Jetzt muss der Garbage Collector diesen Speicher freigeben. Dasselbe gilt für alle Arten von Variablen einschließlich statischer

    
Manish Mishra 19.04.2013 16:40
quelle

Tags und Links