.Net object Жизненный цикл \ время жизни против неуправляемого кода - PullRequest
0 голосов
/ 11 августа 2010

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

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

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

Чем это отличается в environemnt для неуправляемого кода?

1 Ответ

1 голос
/ 11 августа 2010

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

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

...