alte Instanz »verworfen« oder »verfallen« auf Englisch?

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    alte Instanz »verworfen« oder »verfallen« auf Englisch?

    Moin,
    Wenn ich so einen Code-Schnipsel habe (Pseudo-Code und Beispiel-Benennung):

    VB.NET-Quellcode

    1. Private shared meinBitmapglobal as Bitmap
    2. '...
    3. Using einBild As New Drawing.Bitmap(Breite, Höhe, PixelFormat)
    4. ' tue etwas
    5. meinBitmapglobal = Nothing
    6. meinBitmapglobal = New Bitmap(einBild)
    7. End Using
    8. GC.Collect()


    Wie lautet der Rechtfertigungs-Kommentar für GC.Collect()?
    Ich habe jetzt geschrieben:

    A new bitmap instance was written to ‘meinBitmapglobal’ and the old one was discarded (except for the first run). Since the memory would not be emptied immediately despite ‘meinBitmapglobal = Nothing’, ‘GC.Collect()’ is used here.

    Ich tue mich gerade etwas schwer mit dem Wort verworfen, obwohl es korrekt ist. Irgendwas stört mich daran.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bartosz“ ()

    disposed
    free memory of disposed Bitmap instances

    Edit:
    Warum benennst du deine Variablen deutsch und kommentierst auf Englisch?
    Ist das nicht inkonsequent?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „petaod“ ()

    Jou.
    @Bartosz So wird ein Schuh draus:

    VB.NET-Quellcode

    1. Using einBild As New Drawing.Bitmap(Breite, Höhe, PixelFormat)
    2. ' tue etwas
    3. If meinBitmapglobal IsNot Hothing Then
    4. meinBitmapglobal.Dispose()
    5. End If
    6. meinBitmapglobal = New Bitmap(einBild)
    7. 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!
    Warum benennst du deine Variablen deutsch und kommentierst auf Englisch?
    Ich habe geschrieben Beispiel-Benennung.
    @'RodFromGermany' und @'ErfinderDesRades' disposen ist mir dann auch eingefallen, als ich unterwegs war. :rolleyes: Ich werde es so machen:

    VB.NET-Quellcode

    1. If meinBitmapglobal IsNot Nothing Then
    2. meinBitmapglobal.Dispose()
    3. End If


    Also auf keinen Fall GC.Collect() nutzen – tut nicht gut, ja? Und zur eigentlichen Frage: disposed für weggeworfene Instanzen.
    @Bartosz Fiel mir grade wie Schuppen von den Augen, Du musst diese Bitmap nur ein Mal erstellen:

    VB.NET-Quellcode

    1. ' tue etwas
    2. If meinBitmapglobal IsNot Hothing Then
    3. meinBitmapglobal.Dispose()
    4. End If
    5. meinBitmapglobal = New Bitmap(Breite, Höhe, PixelFormat)
    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!
    Ne kleine C&P-Bremse? Oder war das unabsichtlich mit dem Hothing?
    @Bartosz: Meine DisposeAndNullify-Extension kennst Du ja noch aus nem anderen Bitmap-Thread von Dir, oder? Dann ginge das RfG-Beispiel auch so, falls Du öfters mal manuell disposed:

    VB.NET-Quellcode

    1. meinBitmapglobal.DisposeAndNullify()
    2. meinBitmapglobal = New Bitmap(Breite, Höhe, PixelFormat)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    ErfinderDesRades schrieb:

    Für Nullifizierung gibts keinen Grund
    Falls das an mich ging:

    VaporiZed schrieb:

    falls [man] öfters mal manuell disposed
    Damit man keine Variablen mit "disposierten" Instanzen rumschwirren hat, sondern einfach auf Nothing prüfen kann, z.B. indirekt mit dem nichtallzuneuen?Operator oder bei klassischen Methodeneigangsprüfungen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @RodFromGermany Die globale Bitmap brauche ich in einer später ausgeführten Prozedur, und die lokale Bitmap bearbeite ich und schreibe sie dann auf die globale. Konntest du aber nicht wissen. Ich wollte nur fragen, wie GC.Collect() zu rechtfertigen ist, daher habe ich nicht den gesamten Code platziert. Danke Dir auf jeden Fall.
    @VaporiZed Deine Extension habe ich schon mal gesehen; ich habe sie nun eingebaut, läuft super.

    Wenn ich Montagabend zu Hause bin, können wir mal gucken, wie man diese globale/lokale Bitmap-Sache besser löst, wenn ihr Lust habt. Denn ich habe gerade mittels Strg+F herausgefunden, dass die globale Bitmap nur einmal später gebraucht wird. Allerdings erst auf Button-Klick. :) Ok, ich setze diesen Thread auf erledigt.