万悪の源-事件


シーンには2つのクラスがあります
 class A
{
public EventHandler TestEventHandler;

}
class B
{
public string Name { get; set; }
public void Test(object o, EventArgs e)
{
Console.WriteLine(Name+"say: 。。。");
//do somethings
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
b.Name = "__b";
a.TestEventHandler += b.Test;//TestEventHandler Test , b

b = null;
GC.Collect();

a.TestEventHandler(null, null);
Console.ReadKey();
}
}

aが長期にわたって生存し、bが短命で新築・廃棄され続けた場合、メモリの漏洩が発生する.
これは複雑な多層のシーンでは,このようなバグは発見しにくい.
万悪の事件ですね.さらに悪いことにTestEventHandlerはnullに直接置くことができず、どうしても-=..元の参照を見つける方法も必要です.fuck!
解決策1:Dispose()モードを使用する.
2:弱い参照を使用します.