2009-03-27 8 views
4

私は最近(どこにいたのかもしれませんが、質問を見つけることができないかもしれません)、デバッグセッションで、VSで停止を押すだけでプロセスが終了し、GCが実行されないと思います。ただし、通常、アプリケーションウィンドウを閉じると、期待どおりにGCが実行されます。タスクマネージャでプロセスを終了すると、GCはまだクリーンアップされますか?

これは間違いありませんか?

また、(非デバッグ)プロセスがタスクマネージャで強制終了された場合はどうなりますか?GCはまだクリーンアップされていますか?

答えて

12

プロセスを強制終了すると、オペレーティングシステムはプロセスのメモリをクリーンアップしますが、.NETランタイム内のGCは発生せず、ファイナライザも実行されません。

編集:それは適切なWM_CLOSEウィンドウメッセージを送信します、あなたは、「タスクの終了」を送信した場合

を(上記は、あなたが「タスクの終了」を使用していない場合は、プロセスを強制終了する場合にのみ正しかったです) ではなく、が一度にプロセスを終了し、.NETが正常にシャットダウンされます。

編集:(さらに別の補遺)

デバッグを停止した場合、それが一度にプロセスをシャットダウンなる、TerminateProcess()とほぼequivilentです。

関連する問題