如果您在任务管理器中结束进程,GC是否仍然清理?

Pau*_*ulB 4 c# garbage-collection

我想我最近读过某个地方(甚至可能已经在SO上但是我找不到问题),在调试会话中,在VS中按停止只会杀死进程并且不会发生GC.但是,关闭应用程序窗口通常会按预期执行GC.

它是否正确?

此外,在任务管理器中杀死(非调试)进程时会发生什么 - GC是否仍在清理?

Mar*_* C. 12

如果您终止进程,操作系统将清理进程的内存,但.NET运行时内不会发生GC,也不会运行终结器.

编辑:(以上只有在你杀死进程时才是正确的,而不是你使用"结束任务")

如果发送"结束任务",它将向程序发送相应的WM_CLOSE窗口消息,并且不会立即终止进程,并且.NET可以正常关闭.

编辑:(又一个附录)

如果你停止调试,它大致相当于TerminateProcess(),它将立即关闭进程.