Это вызывает утечку памяти (в .NET)? - PullRequest
2 голосов
/ 23 февраля 2010

У меня есть вопрос утечки памяти. Будут ли экземпляры obj когда-либо иметь право на сборку мусора, пока экземпляр класса TopClass не выйдет из области видимости?

public class TopClass
{
  public void MyFunction()
  {
    TestClass obj = new TestClass();
    obj.PropertyChanged += (s,e) => { //Do some code };
    obj = null;
  }
}

Кроме того, из-за этого все объекты, которые создают экземпляр TopClass и вызывают MyFunction (), не имеют права на GC, верно?

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

Ответы [ 2 ]

4 голосов
/ 23 февраля 2010

Неа. obj будет собрано все в порядке. Ничто в этом коде не вызывает строгой ссылки.

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

3 голосов
/ 23 февраля 2010

obj будет иметь право на сборку мусора, как только вы установите его на ноль (но фактическая сборка будет сделана позже, конечно). Подписка на событие PropertyChanged не создает ссылку на obj, она создает ссылку из obj на экземпляр TopClass. И это также не помешает сбору экземпляра TopClass, если на него не ссылаются где-то еще

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