0

このイベントの使用により、Silverlight でメモリ リークが発生するのでしょうか?

private void Button_Click(object sender, RoutedEventArgs e)
{
    var test = new ChildWindow();
    EventHandler closedEvent = null;
    closedEvent =
        (s, args) =>
        {
            test.Closed -= closedEvent;
            if (test.DialogResult == true)
            {
                // something
            }
        };
    test.Closed += closedEvent;
    test.Show();
}

有線で漏れやすい Closed イベントの使用例が多数あります。このサンプルでメモリ リークが解消されるかどうか疑問に思ったことはありませんか? ありがとう。

4

1 に答える 1

0

メモリリークの理由はわかりません。ボタンをクリックするたびに、メソッドが終了した後にガベージされる新しい ChildWindow オブジェクトを割り当てます。参照を保存しないためです。Labda (そのオブジェクトも) は ChildWindow オブジェクトの後にガベージされます。

于 2012-11-04T07:59:52.007 に答える