Удаление обработчиков событий DataContextChanged / Loaded в пользовательском элементе управления XAML - PullRequest
4 голосов
/ 22 июля 2011

В попытках уменьшить утечки памяти я пытаюсь выяснить, после добавления обработчика в событие «DataContextChanged» или в событие «Loaded» в пользовательском элементе управления XAML, т. Е. (UserControl.xaml.cs):

    public MyUserControl()
    {
        InitializeComponent();
        DataContextChanged += new DependencyPropertyChangedEventHandler(MyUserControl_DataContextChanged);
        Loaded += new RoutedEventHandler(MyUserControl_Loaded);
    }

Если мне нужно удалить его.WPF справляется с этим или мне нужно удалить их вручную?

1 Ответ

5 голосов
/ 22 июля 2011

Краткий ответ - нет.

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

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

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

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