Какой смысл в сборщике мусора - PullRequest
3 голосов
/ 21 октября 2008
SqlConnection connection = new SqlConnection(FROM_CONFIGURATION) 
SqlCommand command = new SqlCommand("SomeSQL", connection); 
connection.Open(); 
command.ExecuteNonQuery(); 
command.Dispose(); 
connection.Dispose();

Рекомендуется, чтобы приведенный выше код включал try / catch (или using), чтобы в случае возникновения исключения все ресурсы располагались правильно.

Но если вам приходится беспокоиться об утилизации вещей вручную, тогда какой смысл в GC ?! Разве GC не позаботится об этом для кодера?

Ответы [ 15 ]

1 голос
/ 21 октября 2008

Я не совсем уверен насчет c #, как это выглядит, но обычно сборщик мусора управляет памятью. Это соединение, помимо памяти объекта, имеет ресурсы сервера. База данных, которая находится в отдельном процессе, должна поддерживать соединение. Закрытие очищает их.

1 голос
/ 21 октября 2008

вышеупомянутый код освобождает приобретенные ресурсы (хотя я не думаю, что вам следует вызывать метод Dispose () самостоятельно, поскольку освобождение ресурсов означает закрытие потоков и тому подобное). GC удаляет объект из памяти (освобождает память, используемую объектом), но это можно сделать только после освобождения ресурсов объектом.

0 голосов
/ 21 октября 2008

Выше приведен пример того, как внутренне выделенная память или ресурсы перемещаются в управляемый мир как дескриптор. В этом сценарии из-за того, что управляемый мир не выделил память, он не может автоматически ее «очистить». Память / ресурсы должны быть явно расположены или, по крайней мере, расположены в финализаторе.

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

0 голосов
/ 21 октября 2008

GC ограничен, когда дело доходит до освобождения внешних ресурсов, таких как соединения с БД или файловые хендлы Тем не менее, для выделения памяти в мире .NET, он берет на себя множество повседневных задач управления памятью.

0 голосов
/ 21 октября 2008

GC позаботится об утилизации предметов, но их утилизация может произойти не сразу. Утилизация объектов вручную освобождает память быстрее.

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