Могут ли делегаты вызывать утечки памяти?Могут ли делегаты вызывать утечки памяти?
Я имею в виду, например, если класс A
содержит ADelegate
, а последний указывает на BMethod
(класс B
), может ли это предотвратить сбор классов класса A или B GC?
Если это так, как мы «свободные» делегаты (установка ADeletate = Nothing
/нуль?)
Как вы прокомментируете это один:
//Class A Finalize, containing ADelegateInstance as ADelegate'
protected override void Finalize()
{
ADelegateInstance =
(ADelegate)System.Delegate.RemoveAll(
ADelegateInstance, ADelegateInstance);
ADelegateInstance = null;
base.Finalize();
}
'Class A Finalize, containing ADelegateInstance as ADelegate'
Protected Overrides Sub Finalize()
ADelegateInstance = _
CType(System.Delegate.RemoveAll(ADelegateInstance, ADelegateInstance), _
ADelegate)
ADelegateInstance = Nothing
MyBase.Finalize()
End Sub
Что делать, если у меня есть большой сложный объект с несколькими подписчиками делегатов/unsubscriptions, наконец, в Dispose этого объекта. Я хочу «позволить умереть» всем ссылкам с этим делегатом. – serhio
Тогда вы можете реализовать IDisposable. –
Да, и что мне следует написать в методе Dispose для этого делегата. , может быть, 'System.Delegate.RemoveAll (myDelegate, myDelegate)' поможет? – serhio