Wenn ich ein statisches WebClient-Objekt habe, muss ich dann am Ende von Main() Dispose() für dieses Objekt aufrufen?
Antworten
Zu viele Anzeigen?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.