Ответ 1
Вам не обязательно. Сборщик мусора времени выполнения придет и очистит его для вас. Вот почему вы используете С#, а не неуправляемый С++, в первую очередь:)
Может ли кто-нибудь рассказать мне, как я могу освобождать объекты на С#? Например, у меня есть объект:
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.
*/
Спасибо за вашу помощь
Вам не обязательно. Сборщик мусора времени выполнения придет и очистит его для вас. Вот почему вы используете С#, а не неуправляемый С++, в первую очередь:)
Вам не обязательно. Вы просто прекратите ссылаться на них, и сборщик мусора (в какой-то момент) освободит их для вас.
Вы должны реализовать IDisposable
типы, которые используют неуправляемые ресурсы, и обернуть любой экземпляр, который реализует IDisposable
в using
.
Нет. Это то, что сборщик мусора делает автоматически - в основном, когда среда выполнения .NET нуждается в памяти, она будет обходить и удалять объекты, которые больше не используются.
Что вам нужно сделать для этого, так это удалить все linnks для объекта.
В вашем случае....
obj1 = NULL;
в конце, тогда объект больше не ссылается и может быть заявлен из сборщика мусора.
Вы можете проверить http://en.wikipedia.org/wiki/Garbage_collection_(computer_science) для более подробной информации.
Обратите внимание: если у объекта есть ссылки на неуправляемые ресурсы (например, открытые файлы и т.д.), он должен реализовать одноразовый шаблон (IDisposable interface), и вы должны явно освободить эти ссылки, когда вам больше не нужен объект.
Не рекомендуется, но если вам действительно нужно, вы можете принудительно собрать мусор через:
GC.Collect();
Вы можете использовать с помощью инструкции. После области действия ссылка на объект будет удалена, и сборщик мусора может собрать его позже.
Вы перестаете ссылаться на них и пусть сборщик мусора возьмет их.
Если вы хотите освободить объект, добавьте следующую строку:
obj1 = null;
Сборщик мусора, если он свободен для удаления объекта (если нет другого указателя на объект, который его поддерживает).
Как уже упоминалось, вам не нужно явно освобождать их; однако то, о чем не упоминалось, заключается в том, что, хотя это правда, встроенный сборщик мусора освободит их для вас, нет гарантии, КОГДА сборщик мусора освободит его.
Все, что вы знаете, это то, что когда он выпал из сферы действия, он МОЖЕТ быть очищен GC и на каком-то этапе будет.
Как сказал Крис, С# делает большую часть коллекции мусора для вас. Экземпляры, где вам нужно будет рассмотреть сбор мусора, - это реализация интерфейса IDisposable
и при использовании WeakReference
.
См. http://msdn.microsoft.com/en-us/library/system.idisposable.aspx и http://msdn.microsoft.com/en-us/library/system.idisposable.aspx для получения дополнительной информации. информация.
GC собирает все, кроме неуправляемых ресурсов.
Неуправляемые ресурсы должны реализовывать IDisposable
. Если вы используете объект, реализующий IDisposable
, тогда вы должны либо вызвать метод object Dispose()
, когда он больше не нужен, либо обернуть его экземпляр в инструкции using
.