代表会导致内存泄漏吗?

ser*_*hio 4 .net delegates memory-leaks

代表会导致内存泄漏吗?

我的意思是,例如,如果一个类A包含a ADelegate而后者指向BMethod(B类),这可以阻止GC的A类或B类集合吗?

如果是这样,我们如何"释放"委托(设置ADeletate = Nothing/ null?)

你怎么评论这个:

//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
Run Code Online (Sandbox Code Playgroud)

Ed *_* S. 9

是的,除非您取消订阅活动,否则参考文件将保持活动状态:

someObject.SomeEvent -= SomeDelegate;
Run Code Online (Sandbox Code Playgroud)

  • 是的,我应该在该委托的 Dispose 方法中写什么。,也许 `System.Delegate.RemoveAll(myDelegate, myDelegate)` 会有所帮助? (2认同)