C#-Objektverwaltung und -Speicher: Vergleich von Dispose und Setzen auf Null
Eine häufige Frage bei der Arbeit mit einer durch Garbage Collection erfassten Programmiersprache wie C# lautet: Muss ich das Objekt manuell freigeben und auf Null setzen, oder übernimmt der Garbage Collector (GC) die Bereinigung?
Setzen Sie das Objekt auf Null
Der Garbage Collector bereinigt automatisch Objekte, die nicht mehr verwendet werden, basierend auf ihrer Lebensdauer und Speicherverfügbarkeit. Wenn Sie ein Objekt auf null setzen, wird dessen Freigabe nicht sofort eingeleitet. Es entfernt einfach den Verweis auf das Objekt und macht es für die Erfassung durch den GC geeignet.
In manchen Fällen kann es von Vorteil sein, ein Objekt explizit auf null zu setzen. Wenn Sie beispielsweise ein statisches Feld haben, dessen Wert nicht mehr benötigt wird, wird durch das Setzen auf Null der Verweis auf das Objekt freigegeben, sodass der GC seinen Speicher schneller zurückgewinnen kann.
Freigabe des Objekts
Wenn ein Objekt die IDisposable-Schnittstelle implementiert, wird dringend empfohlen, es freizugeben, wenn es nicht mehr benötigt wird, insbesondere wenn es nicht verwaltete Ressourcen verwaltet. Nicht verwaltete Ressourcen sind Ressourcen, die nicht vom GC verarbeitet werden, z. B. Dateihandles oder Datenbankverbindungen.
Mit der Freigabe von Objekten können Sie nicht verwaltete Ressourcen umgehend freigeben und Speicherlecks verhindern. C# bietet eine Möglichkeit, Objekte mithilfe der using-Anweisung automatisch freizugeben:
<code class="language-csharp">using (MyIDisposableObject obj = new MyIDisposableObject()) { // 使用对象 } // 对象在此处被释放</code>
Dies entspricht:
<code class="language-csharp">MyIDisposableObject obj; try { obj = new MyIDisposableObject(); } finally { if (obj != null) { ((IDisposable)obj).Dispose(); } }</code>
Durch die Verwendung können Sie sicherstellen, dass das Objekt auch unter ungewöhnlichen Umständen korrekt freigegeben wird.
Das obige ist der detaillierte Inhalt vonAuf Null setzen oder entsorgen: Wann sollte ich meine C#-Objekte bereinigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!