In .NET, was passiert mit einem Thread, wenn er seine Aufgabe beendet? Muss ich das schaffen? [Duplikat]

8

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%     
anthonybell 22.10.2013, 21:36
quelle

3 Antworten

8

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

Ссылка

    
Anthony Russell 22.10.2013 21:40
quelle
4

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.

    
Rahul Tripathi 22.10.2013 21:42
quelle
1

Laut dieser Antwort , "wird der Thread nach der Ausführung des Thread-Codes gestoppt und seine Ressourcen werden wiederhergestellt. "

    
Charlie Kilian 22.10.2013 21:41
quelle

Tags und Links