Wird der Garbage Collector heruntergefahren, nachdem die gesamte Main-Methode ausgeführt wurde oder noch im Hintergrund ausgeführt wird, um alle Objekte zu bereinigen, die die Main-Methode im Speicher übrig hat.Wann beendet der Garbage Collector in C# exit
Antwort
Der Garbage Collector wird im Hintergrund am Programm-Exit ausgeführt, um ausstehende Finalizer auszuführen, aber wenn die Finalizer zu lange dauern, gibt sie auf und wird vorzeitig beendet.
Sie können dies demonstrieren mit folgendem Programm:
using System;
using System.Diagnostics;
using System.Threading;
namespace Demo
{
class Test
{
~Test()
{
Thread.Sleep(250);
Trace.WriteLine("In Test finalizer");
}
}
class Program
{
static void Main()
{
var t = new Test[20];
for (int i = 0; i < 20; ++i)
t[i] = new Test();
//t = null;
//GC.Collect();
//GC.WaitForPendingFinalizers();
}
}
}
ausführen, das Programm unter dem Debugger und Sie werden sehen, dass nur einige der 20 Finalizers sind tatsächlich laufen, bevor der GC aufgibt.
Sie können jedoch sicherstellen, dass alle anstehenden Finalizers vollständig am Ende des Programms laufen durch
GC.Collect();
GC.WaitForPendingFinalizers()
Aufruf Wenn Sie die drei kommentierten-out Zeilen am Ende der Main()
in der obigen Beispielcode Kommentar- und führen Sie das Programm unter dem Debugger erneut aus, Sie werden sehen, dass alle 20 Aufrufe an den Test
Finalizer vorgenommen werden.
Sobald ein Prozess beendet wird, werden alle Ressourcen freigegeben, die zu ihm gehörten. Dies wird vom Betriebssystem durchgeführt. GC ist für verwaltete Ressourcen.
Ich vermute, Main ist die Einstiegsmethode in diesem Fall zum Beispiel in einer Konsolen-App.
Für C# ausführbare Dateien ist main fast immer der Einstiegspunkt, selbst wenn Sie Formulare haben. – MicroVirus
Der Garbage Collector (GC) wird mit Ihrer App gestartet und beendet sich damit. Während der Laufzeit Ihrer App wird sie im Hintergrund ausgeführt, um verwaltete Ressourcen freizugeben.
Der GC wird durch das .NET-Framework selbst erzeugt.
Was ist mit Garbage Collector in Bezug auf Main-Methode – deshmanth
- 1. Wann sammelt der Garbage Collector einen Singleton?
- 2. Wann wird der .net-Garbage-Collector ausgeführt?
- 3. Java Garbage Collector - Wann sammelt es?
- 4. LogManager und Garbage Collector
- 5. Xcode: Garbage Collector Einstellung
- 6. Garbage Collector asp.net
- 7. Eclipse: Garbage Collector Button
- 8. Kopieren von Garbage Collector
- 9. V8-Garbage-Collector-Fehler
- 10. Cocoa-Netzwerk-Streams und der Garbage Collector
- 11. Ruft Garbage Collector Dispose() auf?
- 12. Verwenden von Mono SGen Garbage Collector in C/C++ - Programmen
- 13. Teilstrings und der Go-Garbage Collector
- 14. Java Collections und Garbage Collector
- 15. Garbage Collector und doppelt belegten Speicher
- 16. aktuellen Mono Standard Garbage Collector
- 17. Garbage Collector Auswirkungen auf Solr
- 18. Warum den Garbage Collector deaktivieren?
- 19. Garbage Collector Arbeit mit 2 WeakHashMaps
- 20. Python: Garbage Collector-Verhalten mit Ctypes
- 21. Wie hakt man .NET Speichermanager/Garbage Collector?
- 22. Xamarin Garbage Collector und zirkuläre Referenzen
- 23. Relative Leistung von Java Garbage First (G1) Garbage Collector?
- 24. Wird der Garbage Collector in einem separaten Prozess ausgeführt?
- 25. merkwürdige Wirkung von C# Schließungen auf Garbage Collector
- 26. Hat Objective-C einen Garbage Collector auf dem iPhone?
- 27. Garbage Collector kann Speicherressourcen nicht wiederherstellen
- 28. JAVA Multi-Threading, Speicherleck, Garbage Collector
- 29. UIWebView Lecks, JS Garbage Collector & WebCore VMs
- 30. Gibt JavaScript Garbage Collector globale Variablen an?
Die Finalizer müssen noch ausgeführt werden, nachdem Main beendet wurde. Daher wird der GC/Framework beendet, sobald der Benutzercode vollständig ausgeführt wurde. Es wäre interessant, eine technische, korrekte Antwort darauf zu haben. – MicroVirus
Die Anwendung wird normalerweise beendet, wenn die Main-Methode (und damit der Einstiegspunkt des Programms) beendet wird. An diesem Punkt kann der GC ein wenig laufen, aber schließlich wird das Betriebssystem den gesamten belegten Speicher löschen. – poke
Garbage Collector läuft in einem * separaten Thread *, also kann es auch dann weitergehen, wenn 'Main' zurückgegeben wird –