2009-03-27 2 views
4

Ich glaube, ich habe in letzter Zeit irgendwo gelesen (vielleicht sogar auf SO, aber ich kann die Frage nicht finden), dass in einer Debugsitzung das Drücken von Stop in VS nur den Prozess beendet und kein GC stattfindet. Wenn Sie das App-Fenster schließen, wird GC normalerweise wie erwartet ausgeführt.Bereinigt der GC noch, wenn Sie den Prozess im Task-Manager beenden?

Ist das korrekt?

Was passiert auch, wenn ein (Nicht-Debug-) Prozess im Task-Manager abgebrochen wird - bereinigt der GC noch?

Antwort

12

Wenn Sie den Prozess beenden, bereinigt das Betriebssystem den Arbeitsspeicher des Prozesses, aber es wird kein GC in der .NET-Laufzeitumgebung angezeigt, und es werden keine Finalizer ausgeführt.

Edit: (die oben richtig war nur, wenn Sie den Prozess zu töten, nicht, wenn Sie „Task beenden“ verwenden)

Wenn Sie „Task beenden“ senden, dann wird es die entsprechende WM_CLOSE Fenster Nachricht senden zum Programm und nicht beenden Sie den Prozess sofort und .NET kann ordnungsgemäß heruntergefahren werden.

Edit: (noch ein weiterer Nachtrag)

Wenn Sie Debugging stoppen, es zu TerminateProcess() etwa equivilent ist, die sofort den Prozess heruntergefahren wird.

Verwandte Themen