Klasse richtig auflösen...

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Klasse richtig auflösen...

    Hallo Leute und danke für's reinschauen...

    Meine Frage:

    Nehmen wir mal an, ich erstelle eine Klasse. Wie wird diese wieder so aufgelöst, dass der Speicher freigegeben wird?

    Danke fürs mitmachen...

    Bitte keine ganz kluge Sprüche... :)
    Bitte was ?
    Du programmierst eine Klasse, du instanizierst sie, oder was ?
    Was soll da aufgelöst werden ? ^^
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Wenn du keine COM-Objekte oder andere Klassen, die IDisposable implementieren, in deiner Klasse referenzierst, musst du dafür gar nichts tun, für die Freigabe von Verwaltetem Speicher kümmert sich der GC, sobald keine Referenzen mehr existieren.
    Ja, so einen hab ich gleich erwartet...

    Die die ich wirklich fragen wollte, wissen schon was ich meine... Soll ich dir das ganze Programm hierhin schreiben?

    Ein Objekt, von einer Klasse, wenn du es schon richtig willst, soll seine Gültigkeit verlieren und seinen Speicher freigeben.

    Ich meine, wenn man größere Programme schreibt, die über Monate hinweg eingeschaltet bleiben, sollten doch (so meine Vermutung) ihre Objekte löschen oder so...

    Was soll da aufgelöst werden ?

    Für mini-Programme trift so ein Fall meist nie zu...


    AN Artentus:

    ​sobald keine Referenzen mehr existieren.

    Soll dafür Objekt auf null gesetzt werden?
    Sobald alle Variablen, die auf das Objekt verwiesen haben (Ringabhängigkeiten ausgenommen), entweder auf null gesetzt wurden oder ein anderes Objekt zugewiesen bekommen haben, ist das Objekt nicht mehr anprechbar und wird automatisch aus dem Speicher gelöscht, sobald dies erforderlich wird.

    EugenIS schrieb:

    voll läuft
    Verwende bei der Instanziierung von Objekten, die IDisposable implementieren, Using. Da werden die Instanzen sofort ordentlich beräumt:

    VB.NET-Quellcode

    1. Using dlg As New OpenFileDialog
    2. dlg.ShowDialog()
    3. End Using
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    EugenIS schrieb:

    Ja, so einen hab ich gleich erwartet...

    Die die ich wirklich fragen wollte, wissen schon was ich meine...
    Ob dus glaubst oder nicht: Es ist zum proggen enorm wichtig, dass du dich korrekt und präzise ausdrücken kannst.
    Was dir als "dumme Sprüche" auf die Nerven geht, hilft dir dabei, dich klarer auszudrücken, und in Folge auch klarer zu denken, besser zu konzipieren und zu programmieren.
    Deine Frage ging nicht darum, "Objekte aufzulösen", sondern unnötig gewordene Objekte aus dem ArbeitsSpeicher zu entfernen.
    Jo, dafür ist der GC da, und für besondere Fälle muss man auch den IDisposable-Pattern in Anschlag bringen - den muss man aber richtig verstanden haben, sonst bastelt man sich iwelchen Unfug zusammen.