Как освободить все ресурсы класса, когда я закончу с ним - PullRequest
1 голос
/ 24 августа 2010

Как я могу вызвать GC в .net, когда я сделал с объектом, который я создал для класса.

Если я устанавливаю значение объекта как Null

objClassObject=NULL;

Выпускает ли он все объекты и ресурсы, связанные с ним.

Ответы [ 4 ]

8 голосов
/ 24 августа 2010

Установка нулевого объекта не приведет к тому, что ГХ подключится и очистит память.Это помогает сначала понять, что вы делаете, и, к счастью, GC хорошо задокументирован:

Ссылки на различные темы, связанные с GC.

Ответ в том, что 99,999%времени (составленный номер, да) вам не нужно.Если вы выполнили профилирование и обнаружили, что вам действительно нужно принудительно пройти GC, вы можете использовать GC class to попытку сделать это.Вы действительно должны знать, что делаете, и нет никакой гарантии, что GC сделает именно то, что вы хотите.

Раймонд Чен недавно написал несколько хороших статей на эту тему:

Все думают о ГХ неправильным путем

Когда объект получает право на сборку мусора?

Однако, если вы создаете класс, который управляетнекоторый собственный ресурс, вам нужно будет реализовать интерфейс IDisposable , так как GC не будет / не сможет вернуть неуправляемые ресурсы.

3 голосов
/ 24 августа 2010

Краткий ответ: GC.Collect (). Тем не менее, правильный ответ заключается в том, что вы не должны касаться деталей GC. Позвольте .NET управлять вашими объектами за вас. Если objClassObject выходит из области видимости, он имеет право на сборку мусора, и сборщик мусора должен убедиться, что он будет собран для вас.

2 голосов
/ 24 августа 2010

Сам GC имеет дело только с управляемыми resources. Поэтому, если у вас нет неуправляемого кода / ресурсов в этом случае, они не будут выпущены, пока там не будет финализатора с кодом для освобождения неуправляемых ресурсов. Также обратите внимание, что нет необходимости устанавливать объект в null, так что GC очистит это. GC может обнаружить, что нет ссылок, и объект не нужен, и он будет очищен в следующем цикле GC ...

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

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

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

...