防止委派(而不是事件)导致内存泄漏

本文关键字:内存 泄漏 事件 委派 | 更新日期: 2024-07-23 00:06:48

防止委派导致内存泄漏的最佳做法是什么?对于事件处理程序,我只会为每个注册的处理程序调用-=。我给我的代理人分配了一个"="(等号)。我应该在处理时指定NULL吗?

public delegate int MyDelegate(string message);
public class MyManager MyDelegate 
{   
    public MyDelegate ManagerDelegate;
..

public class Transaction
{
    public int DoSomething(string message)
    {
        //do something
    }
    public void init()
    {
        var manager = new MyManager();
        manager.ManagerDelegate = this.DoSomething("abc");

防止委派(而不是事件)导致内存泄漏

实例委托引用一个类实例(在其Target属性中),因此,如果您将该委托存储在某个位置,无论是事件还是简单委托类型的属性,它都将引用您的原始类。在这方面,这是不是一个事件并不重要。因此,如果你想在另一个类还活着的时候收集你原来的类垃圾,你必须清理。删除事件处理程序以及任何其他委托。如果另一个类先死,那么你原来的类也可能死,所以这取决于你的具体情况。

更新:证明:http://pastebin.com/XcTz76dY