Как уничтожать объекты в .Net - PullRequest
2 голосов
/ 21 апреля 2011

Я знаю, что это странный вопрос, но на самом деле я очень рад узнать ответ.Как уничтожить объекты в .Net и вернуть память в кучу?

Ответы [ 3 ]

6 голосов
/ 21 апреля 2011

Краткий ответ

System.GC.Collect(); 

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

Длинный ответ

Я считаю, что C # использует сборку мусора, поэтому в лучшем случае вы можете попросить его убрать, но он действительно делает это в свое время.Объект считается разрушенным, если на него нет ссылок.

Например:

Object myobject = new Object();
Object sameobject = myobject;
myobject = null;
//Garbage collection will not clean it up because sameobject is still pointing to the memory location
sameobject = null;
//Garbage collection can now clean it up

Вот отличная статья о сборке мусора .NET использует

5 голосов
/ 21 апреля 2011

Вы не можете и не должны пытаться.

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

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

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

4 голосов
/ 21 апреля 2011

Это делается автоматически, потому что это управляемый язык.Common Language Runtime имеет сборщик мусора, который отслеживает объекты в куче, на которые больше нельзя ссылаться, и делает доступным пространство, которое они используют в какой-то момент (что является неопределенным; поэтому .NET не имеет «деструкторов» в смыслеC ++).

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