Утечки памяти в EventHandler: Как определить, о ком позаботится утилизация против необходимости отписаться? - PullRequest
0 голосов
/ 12 апреля 2019

Недавно я рассматривал проблему утечек памяти и то, с чем я до сих пор сталкиваюсь. Как и когда определить, что ссылка EventHandler приведет к утечке памяти.

Было много ответов о том, чтобы отписаться, когда вы сомневаетесь, но у меня проблема с EventHandler ссылками, приводящими к утечке памяти. Даже когда я никогда не создавал и не подписывался на EventHandler в вопросе.

Например, при использовании ElementHost. Я был вынужден использовать приведенный ниже код в методе Dispose пользовательского элемента управления, чтобы предотвратить утечку памяти.

FrameworkElement fe = elementHost.Child as FrameworkElement;
if (fe != null)
{
    SizeChangedEventHandler handler = (SizeChangedEventHandler)Delegate.CreateDelegate(typeof(SizeChangedEventHandler), elementHost, "childFrameworkElement_SizeChanged");
    fe.SizeChanged -= handler;
}

Любое объяснение того, почему вышеупомянутое необходимо и что определяет необходимость отмены подписки на EventHandlers в целом по сравнению с базовым методом dispose для удаления ссылок, будет очень признательно.

...