Garbage Collector

    • VB.NET

    Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

      Garbage Collector

      Ist es nicht was schönes, wenn man anderen beim Aufräumen zuschauen kann?

      Ich les' gerade Jeffrey Richters "Applied Microsoft .NET Framework Programming". Ist zwar schon etwas älter, aber wirft halt einen Blick hinter die Kulissen. Gerade der Bereich über den Garbage Collecter etc ist ganz interessant.

      Nehmen wir eine Klasse:

      VB.NET-Quellcode

      1. Public Class GCWatcher
      2. Protected Overrides Sub Finalize()
      3. Debug.Print("GC on the prowl")
      4. Try
      5. If Not AppDomain.CurrentDomain.IsFinalizingForUnload AndAlso Not Environment.HasShutdownStarted Then
      6. Dim g As New GCWatcher
      7. End If
      8. Catch
      9. ' nothing to do, but in case of error, the GC should continue anyway!
      10. End Try
      11. End Sub
      12. End Class

      Wie man sieht, ist das ein Blödwiestroh-Objekt, das überhaupt nichts macht. Das einzige WAS es macht, ist eine neue Instanz vom gleichen Typ zu erzeugen (die sofort "out-of-scope" geht!), wenn nicht gerade das Programm beendet wird.
      Dieses Objekt ist also immer "Müll". Aber wann wird der Müll rausgetragen? Dazu verwenden wir folgendes:

      VB.NET-Quellcode

      1. Public Class Form1
      2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
      3. Dim g As New GCWatcher
      4. End Sub
      5. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
      6. For i = 1 To 5000
      7. Dim b(100) As Integer
      8. b(0) = i
      9. Next
      10. End Sub
      11. End Class

      Wir erzeugen also unser allererstes Objekt und müllen dann, wenn gewünscht den Speicher zu (Button2 ggf etwas öfter drücken). Jedesmal, wenn der GC den Speicher aufräumt (unsere Objekte in der Schleife sind ja auch sofortiger Sondermüll), wird uns das per Debug.Print aus dem GCWatcher angezeigt.

      Ggf reichlich sinnlos, aber wenn man mal sehen will (ohne gleich nen Performance-Counter zu installieren etc) wie der GC so im eigenen Programm zu tun hat, dann kann man hier mal mit rumspielen.

      Wer sich das Buch zulegen will: gibts für kleines bei ... (***zon) ;) Aber aufgemerkt: a) englisch und b) dass man programmieren kann, wird vorausgesetzt - es ist KEIN Einsteigerbuch (IMHO)

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