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

时间:2009-03-27 09:58:00

标签: c# garbage-collection

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

这是对的吗?

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

1 个答案:

答案 0 :(得分:12)

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

编辑(以上内容仅在您终止进程时才正确,如果您使用“结束任务”则不正确)

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

编辑(又一个附录)

如果您停止调试,它与TerminateProcess()大致相同,这将立即关闭该过程。