.Net object Жизненный цикл \ время жизни против неуправляемого кода

Я пытаюсь понять, как объекты создаются в мире.Net, а не в неуправляемой среде кода (VB6 и т. Д.).

Из того, что я понимаю, когда объект создается в, скажем, C# с использованием нового keyowrd, ссылочная переменная помещается в управляемую кучу, пока сборщик мусора не примет упреждающую меру, чтобы проверить, есть ли у объекта ссылки на него. Если нет, он уничтожен. Означает ли это, что GC всегда работает? Разве это не дорогой процесс?

Может кто-нибудь объяснить лучше?

Как это отличается в незавершенном коде environemnt?

1 ответ

GC не работает непрерывно. Он запускается по требованию, что означает, что запрос памяти не может быть выполнен без предварительного освобождения памяти. Так что нет, это не огромные расходы. На стороне сервера он может работать в фоновом режиме. (Кажется, я помню, что это будет расширяться, и теперь будет доступно больше многоядерных систем?)

Для большинства приложений GC - огромное улучшение по сравнению с неуправляемым кодом. Там нет подсчета ссылок, и нет необходимости отслеживать все пути, где может потребоваться освобождение объекта. Когда на него больше нет ссылок, он становится коллекционным. Это значительно упрощает кодирование, а утечки памяти почти (не полностью) остались в прошлом.

Другие вопросы по тегам