Как мне освободить память в .NET? - PullRequest
0 голосов
/ 02 декабря 2010

Как мне освободить память в .NET? Правильно ли делать:

myArray = null;
GC.Collect();

или

myArray = Nothing
GC.Collect()

Или я должен всегда ждать, пока сборщик мусора произойдет, когда ОС будет готова?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 02 декабря 2010

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

0 голосов
/ 02 декабря 2010

Почему вас не должно волновать, вместо этого расслабьтесь и продолжайте писать свой код, потому что он уже позаботился о this

0 голосов
/ 02 декабря 2010

Согласно странице MSDN на GC.Collect ():

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

Это предполагает, что память, из которой вы удалили ссылку из , может быть освобождена , если нет другихРекомендации.Тем не менее, вы должны знать, что запуск функции может занять много времени (с точки зрения программы), поэтому вы, вероятно, не захотите вызывать ее самостоятельно: если вы попытаетесь сделать это слишком часто, это может привести к ненужной избыточности.работать и резко замедлить ваше приложение.Если это выгодно, это должно произойти скоро в любом случае.Если вам действительно нужно детерминированное уничтожение, подумайте о том, чтобы добавить немного C ++ и использовать «настоящую» кучу вместо GC-ed.

0 голосов
/ 02 декабря 2010

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

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