Подтвердить что ты не робот

Как освободить объекты в С#

Может ли кто-нибудь рассказать мне, как я могу освобождать объекты на С#? Например, у меня есть объект:

Object obj1 = new Object();
//Some code using obj1
/*
Here I would like to free obj1, 
after it is no longer required 
and also more importantly 
its scope is the full run time of the program.
*/

Спасибо за вашу помощь

4b9b3361

Ответ 1

Вам не обязательно. Сборщик мусора времени выполнения придет и очистит его для вас. Вот почему вы используете С#, а не неуправляемый С++, в первую очередь:)

Ответ 2

Вам не обязательно. Вы просто прекратите ссылаться на них, и сборщик мусора (в какой-то момент) освободит их для вас.

Вы должны реализовать IDisposable типы, которые используют неуправляемые ресурсы, и обернуть любой экземпляр, который реализует IDisposable в using.

Ответ 3

Нет. Это то, что сборщик мусора делает автоматически - в основном, когда среда выполнения .NET нуждается в памяти, она будет обходить и удалять объекты, которые больше не используются.

Что вам нужно сделать для этого, так это удалить все linnks для объекта.

В вашем случае....

obj1 = NULL;

в конце, тогда объект больше не ссылается и может быть заявлен из сборщика мусора.

Вы можете проверить http://en.wikipedia.org/wiki/Garbage_collection_(computer_science) для более подробной информации.

Обратите внимание: если у объекта есть ссылки на неуправляемые ресурсы (например, открытые файлы и т.д.), он должен реализовать одноразовый шаблон (IDisposable interface), и вы должны явно освободить эти ссылки, когда вам больше не нужен объект.

Ответ 4

Не рекомендуется, но если вам действительно нужно, вы можете принудительно собрать мусор через:

GC.Collect();

Ответ 5

Вы можете использовать с помощью инструкции. После области действия ссылка на объект будет удалена, и сборщик мусора может собрать его позже.

Ответ 6

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

Если вы хотите освободить объект, добавьте следующую строку:

obj1 = null;

Сборщик мусора, если он свободен для удаления объекта (если нет другого указателя на объект, который его поддерживает).

Ответ 7

Как уже упоминалось, вам не нужно явно освобождать их; однако то, о чем не упоминалось, заключается в том, что, хотя это правда, встроенный сборщик мусора освободит их для вас, нет гарантии, КОГДА сборщик мусора освободит его.

Все, что вы знаете, это то, что когда он выпал из сферы действия, он МОЖЕТ быть очищен GC и на каком-то этапе будет.

Ответ 8

Как сказал Крис, С# делает большую часть коллекции мусора для вас. Экземпляры, где вам нужно будет рассмотреть сбор мусора, - это реализация интерфейса IDisposable и при использовании WeakReference. См. http://msdn.microsoft.com/en-us/library/system.idisposable.aspx и http://msdn.microsoft.com/en-us/library/system.idisposable.aspx для получения дополнительной информации. информация.

Ответ 9

GC собирает все, кроме неуправляемых ресурсов.

Неуправляемые ресурсы должны реализовывать IDisposable. Если вы используете объект, реализующий IDisposable, тогда вы должны либо вызвать метод object Dispose(), когда он больше не нужен, либо обернуть его экземпляр в инструкции using.