私はグーグルで検索しましたが、欲しいものが得られませんでした。私は正しいか間違っているかわかりません。見て、私は GC.Collect() を理解しようとしているので、ここにコードがあります..
public class SomePublisher
{
public event EventHandler SomeEvent;
}
public class SomeSubscriber
{
public static int Count;
public SomeSubscriber(SomePublisher publisher)
{
publisher.SomeEvent += new EventHandler(publisher_SomeEvent);
}
~SomeSubscriber()
{
SomeSubscriber.Count++;
}
private void publisher_SomeEvent(object sender, EventArgs e)
{
// TODO: something
}
}
私はメインスレッドでこれを行います..
SomePublisher publisher = new SomePublisher();
for (int i = 0; i < 10; i++)
{
SomeSubscriber subscriber = new SomeSubscriber(publisher);
subscriber = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine(SomeSubscriber.Count.ToString());
Console.ReadLine();
私は出力0を取得していますが、GC.Collect()はメモリからclass1オブジェクトを削除する必要があるため、class1デストラクタを呼び出す必要があるため、カウントを10に増やす必要があるため、私によれば10になるはずです..