Недавно я рассматривал проблему утечек памяти и то, с чем я до сих пор сталкиваюсь. Как и когда определить, что ссылка 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 для удаления ссылок, будет очень признательно.