Muss ich etwas mit diesem Thread tun, nachdem die Console.WriteLine beendet wurde (oder den Speichervorgang abbricht) oder wird die Garbage Collection in diesen Thread eingefügt und entfernt?
%Vor%Kurze Antwort:
Wenn ein Thread seinen Prozess beendet hat, wird er automatisch vom Garbage Collector entsorgt, wenn nichts anderes darauf verweist.
Lange Antwort:
Nachdem der Garbage Collector von der CLR initialisiert wurde, weist er a Speichersegment zum Speichern und Verwalten von Objekten. Dieser Speicher wird aufgerufen den verwalteten Heap im Gegensatz zu einem systemeigenen Heap im Betriebssystem. Für jeden verwalteten Prozess gibt es einen verwalteten Heap.
Alle Threads in der Prozess reservieren Speicher für Objekte auf dem gleichen Haufen. Reservieren Speicher ruft der Garbage Collector die Win32 VirtualAlloc-Funktion auf, und reserviert jeweils ein Speichersegment für verwaltete Anwendungen. Der Garbage Collector reserviert auch Segmente nach Bedarf und gibt sie frei Segmente zurück zum Betriebssystem (nach dem Löschen von irgendwelchen Objekte) durch Aufruf der Win32 VirtualFree-Funktion. Die weniger Objekte auf dem Heap zugewiesen ist, desto weniger Arbeit muss der Garbage Collector tun. Wenn Sie Objekte zuweisen, verwenden Sie keine aufgerundeten Werte, die größer sind Ihre Bedürfnisse, wie die Zuweisung eines Arrays von 32 Bytes, wenn Sie nur brauchen 15 Bytes. Wenn eine Garbage Collection ausgelöst wird, der Müll collector lädt den Speicher zurück, der von toten Objekten belegt ist.
Die Rückgewinnungsprozess komprimiert Live-Objekte, so dass sie bewegt werden zusammen, und der tote Raum wird entfernt, wodurch der Haufen gemacht wird kleiner. Dies stellt sicher, dass Objekte, die zusammen zugeordnet sind, bleiben zusammen auf dem verwalteten Haufen, um ihre Lokalität zu bewahren. Das Aufdringlichkeit (Häufigkeit und Dauer) von Garbage Collections ist die Ergebnis des Zuweisungsvolumens und der Menge des überlebten Speichers auf dem verwalteten Heap. Der Haufen kann als die Ansammlung von betrachtet werden zwei Heaps: der große Objekt-Heap und der kleine Objekt-Heap. Der Grosse Object Heap enthält sehr große Objekte, die 85.000 Bytes und größer. Die Objekte auf dem großen Objekt-Heap sind normalerweise Arrays. Es ist selten für ein Instanzobjekt, das extrem groß ist.
Referenz
Von hier : -
Die Lebensdauer eines verwalteten Threads ist unabhängig vom Thread-Objekt schafft es, eine sehr gute Sache, da Sie den GC nicht wollen Beende einen Thread, der immer noch arbeitet, nur weil du verloren hast alle Verweise auf das zugehörige Thread-Objekt. Also ist der GC Sammeln des Thread-Objekts, aber nicht des tatsächlich verwalteten Threads. ..................
Der verwaltete Thread wird nicht beendet (und der Speicher für seinen Thread-Stack) wird nicht freigegeben), bis das ThreadProc zurückkehrt oder explizit ist getötet. Wenn also ein verwalteter Thread nicht ordnungsgemäß beendet wird, wird der Speicher gelöscht zugeordnet zu seinem Thread-Stack wird undicht.
Laut dieser Antwort , "wird der Thread nach der Ausführung des Thread-Codes gestoppt und seine Ressourcen werden wiederhergestellt. "
Tags und Links c# multithreading