Сможет ли GC восстановить источник, если источник живет короче слушателя? - PullRequest
0 голосов
/ 05 июля 2019

См. здесь :

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

Как насчет альтернативного сценария, в соответствии с которым класс слушателя создает источник в локальном методе и прослушивает изменение свойства события источника, когда метод завершается, GC сможет восстановить память, используемую источник

public class Listener
{
    private Data _data;
    public Lisener(Data data)
    {
          _data=data;
    }
    public void DoWork()
    {
        var source = new SourceClass(_data); //this class inherits from INotifyPropertyChanged interface
        var source.PropertyChanged+={//do something};

      //when this method finishes, will the memory held by source be freed automatically by GC?
    }
} 
...