Ein Garbage Collector ist kein aktives System. Es läuft "manchmal" und meistens auf Anfrage (zum Beispiel wenn alle vom Betriebssystem angebotenen Seiten voll sind).
Die meisten Müllsammler laufen in der Breite der ersten Generation in einem Subthread. In den meisten Fällen kann es Stunden dauern, bis das Objekt recycelt wird.
Das einzige Problem tritt auf, wenn Sie das Programm beenden möchten. Das ist jedoch kein wirkliches Problem. Wenn Sie killein Betriebssystem verwenden, werden Sie höflich gebeten, Prozesse zu beenden. Wenn der Prozess jedoch aktiv bleibt, kann verwendet werden, kill -9wo das Betriebssystem alle Kontrolle entfernt.
Wenn ich Ihren Code in der interaktiven csharpUmgebung ausgeführt habe, habe ich:
csharp>
1
2
Unhandled Exception:
System.NotSupportedException: Stream does not support writing
at System.IO.FileStream.Write (System.Byte[] array, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0
at System.IO.StreamWriter.FlushBytes () [0x00000] in <filename unknown>:0
at System.IO.StreamWriter.FlushCore () [0x00000] in <filename unknown>:0
at System.IO.StreamWriter.Write (System.Char[] buffer, Int32 index, Int32 count) [0x00000] in <filename unknown>:0
at System.IO.CStreamWriter.Write (System.Char[] buffer, Int32 index, Int32 count) [0x00000] in <filename unknown>:0
at System.IO.CStreamWriter.Write (System.Char[] val) [0x00000] in <filename unknown>:0
at System.IO.CStreamWriter.Write (System.String val) [0x00000] in <filename unknown>:0
at System.IO.TextWriter.Write (Int32 value) [0x00000] in <filename unknown>:0
at System.IO.TextWriter.WriteLine (Int32 value) [0x00000] in <filename unknown>:0
at System.IO.SynchronizedWriter.WriteLine (Int32 value) [0x00000] in <filename unknown>:0
at System.Console.WriteLine (Int32 value) [0x00000] in <filename unknown>:0
at P.Finalize () [0x00000] in <filename unknown>:0
Somit stürzt Ihr Programm ab, weil stdoutes durch die Terminierung der Umgebung blockiert wird.
Beim Entfernen Console.WriteLineund Beenden des Programms. Nach fünf Sekunden wird das Programm beendet (mit anderen Worten, der Garbage Collector gibt auf und gibt einfach den gesamten Speicher frei, ohne die Finalizer zu berücksichtigen).