4 Stimmen

Muss ich Dispose() bei einem statischen Objekt aufrufen?

Wenn ich ein statisches WebClient-Objekt habe, muss ich dann am Ende von Main() Dispose() für dieses Objekt aufrufen?

5voto

SLaks Punkte 832502

Sie sollten immer Dispose() Objekte, wenn Sie mit ihnen fertig sind, unabhängig davon, wo Sie das Objekt abgelegt haben.

Wenn sich das Objekt in einem statischen Feld befindet, kann es schwieriger sein, herauszufinden, wann Sie mit dem Objekt fertig sind.

2voto

Kent Boogaart Punkte 170094

Generell sollten Sie alle Einweggegenstände entsorgen. Dies ermöglicht es ihnen, alle Ressourcen zu bereinigen. Es gibt jedoch keine Garantie dafür, dass dispose bei einem Einwegtyp aufgerufen wird - der Verbraucher könnte es versäumen, es aufzurufen, und die CLR ruft es nicht automatisch auf.

Wenn ein Typ wirklich seine Aufräumlogik ausführen muss (z. B. bei der Zuweisung von nicht verwaltetem Speicher oder der Erstellung eines Dateispeichers im Dateisystem), sollte es einen Finalizer in Verbindung mit dem Dispose-Muster implementieren. Die CLR ruft den Finalizer beim Beenden des Prozesses auf, wenn er nicht bereits aufgerufen wurde (typischerweise durch das Entsorgen des Objekts). Ja, es gibt einige Vorbehalte in diesem Zusammenhang (ein schlechter Finalizer kann zum Beispiel die Party für andere finalisierbare Instanzen verderben), aber die CLR garantiert, dass zumindest Versuchen Sie um alle Finalizer beim Beenden des Prozesses auszuführen.

Technisch gesehen gibt es also keinen Grund, warum Sie die Dispose-Methode in diesem Fall unbedingt aufrufen müssen. Dennoch ist es eine gute Angewohnheit, die man sich angewöhnen sollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X