我想我最近在某处读过(甚至可能已经在SO上但是我找不到问题),在调试会话中,在VS中按停止只会杀死进程并且不会发生GC。但是,关闭应用程序窗口通常会按预期执行GC。
这是对的吗?
此外,在任务管理器中杀死(非调试)进程时会发生什么 - GC是否仍在清理?
答案 0 :(得分:12)
如果您终止进程,操作系统将清理进程的内存,但.NET运行时内不会发生GC,也不会运行终结器。
编辑(以上内容仅在您终止进程时才正确,如果您使用“结束任务”则不正确)
如果您发送“结束任务”,它将向程序发送相应的WM_CLOSE窗口消息,并且不立即终止该进程,.NET可以正常关闭。
编辑(又一个附录)
如果您停止调试,它与TerminateProcess()
大致相同,这将立即关闭该过程。