Lässt sich das folgende Szenario in der Einzel verlinkte Liste berücksichtigen: -Ausplanen Speicher auf ungenutzten Objekte forcelly
ich den Zielknoten gegeben wurden, die gelöscht werden soll.
Nehmen wir die folgenden Daten an und ich werde das Objekt erhalten, das "3" enthält, welches ich löschen werde;
1 -> 2 -> 3 -> 4 -> 5 -> 6
und Klassenstruktur ist: -
Class DataHolder
{
int data;
DataHolder nxtPrt;
}
Void Delete (DataHolder currentData)
{
currentData.data = currentData.nxtPrt.data; //Now 3 will be overwritten by 4
(x) currentData.nxtPrt = (y) currentData.nxtPrt.nxtPrt;
//Now the object which belongs to 4 (previously it was 3),
//is pointing to 5;
}
So, jetzt die eigentliche Kopie des Objekts 4 wird nun worden nutzlos;
Also, jetzt möchte ich nur den Platz auf der ursprünglichen Kopie von 4 zugeteilt entfernen;
Aber jetzt kann ich es nicht auch da verfolgen, habe ich das Objekt geändert zu Punkt 5.
So jetzt an dieser Stelle ich verloren habe das eigentliche Objekt 4.
Darf ich wissen, bitte , gibt es eine Möglichkeit, das Objekt zwangsweise zu bitten, seinen belegten Speicher freizugeben, wie in "C" mit dealloc, , oder ich muss mich auf den GC verlassen, um den ungenutzten Platz nach seinem Wunsch zu sammeln.
Vielen Dank im Voraus.
Mehrere Dinge, die Sie nie tun sollten. Erzwinge keine Speicherbereinigung, schreibe keine eigene LinkedList-Klasse, verwende keine verknüpften Listen. Informieren Sie sich über ein einführendes Buch zur .NET-Programmierung in Ihrer lokalen Bibliothek, um zu vermeiden, dass Sie * jede * schlechte Praxis treffen. –
@ ThomasAndreèLian: 'IDisposable' ist nützlich, um nicht gemanagte Ressourcen wie Dateihandles, Sockets usw. deterministisch freizugeben. Verwalteter Speicher wird vom Garbage Collector behandelt und steht nicht mit IDisposable in Verbindung.Wenn Sie etwas freigeben, wird kein verwalteter Speicher freigegeben. –