GC по-прежнему очищается, если вы завершаете процесс в диспетчере задач? - PullRequest
4 голосов
/ 27 марта 2009

Мне кажется, я где-то недавно читал (возможно, даже был на SO, но не могу найти вопрос), что в сеансе отладки нажатие кнопки stop в VS просто убивает процесс, и GC не выполняется. Однако закрытие окна приложения обычно выполняет ГХ, как и ожидалось.

Это правильно?

Кроме того, что происходит, когда (не отладочный) процесс уничтожается в диспетчере задач - GC по-прежнему очищается?

1 Ответ

12 голосов
/ 27 марта 2009

Если вы уничтожите процесс, операционная система очистит память процесса, но GC во время выполнения .NET не произойдет, и финализаторы не запустятся.

Редактировать: (вышеизложенное было верно, только если вы убили процесс, а не если вы использовали «Завершить задачу»)

Если вы отправите «Завершить задачу», он отправит в программу соответствующее окно с окном WM_CLOSE и не завершит процесс сразу, и .NET сможет корректно завершить работу.

Редактировать: (еще одно добавление)

Если вы прекратите отладку, это будет примерно эквивалентно TerminateProcess(), что сразу остановит процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...