0

私は WPF が初めてで、C++ のバックグラウンドを持っているので、ここでメモリ管理について心配しすぎているのかもしれません。

とにかく、2 列のグリッドを持つ UserControl (NewContact) を取得しました。上部の列には 3 つのラジオ ボタンが表示され、選択されているものに応じて、適切な UserControl がグリッドの下部セクションにロードされます。

private void newMilitaryContactRadioButton_Checked(object sender, RoutedEventArgs e)
    {
        UserControl NMC = new NewMilitaryContact();
        NewContactWindowGridDisplay.Children.Insert(1, NMC);
    }

    private void newMilitaryContactRadioButton_Unchecked(object sender, RoutedEventArgs e)
    {
        NewContactWindowGridDisplay.Children.RemoveAt(1);
    }

    private void newLegalContactRadioButton_Checked(object sender, RoutedEventArgs e)
    {
        UserControl NLC = new NewLegalContact();
        NewContactWindowGridDisplay.Children.Insert(1, NLC);
    }

    private void newLegalContactRadioButton_Unchecked(object sender, RoutedEventArgs e)
    {
        NewContactWindowGridDisplay.Children.RemoveAt(1);
    }

    private void newFirmContactRadioButton_Checked(object sender, RoutedEventArgs e)
    {
        UserControl NFC = new NewFirmContact();
        NewContactWindowGridDisplay.Children.Insert(1, NFC);
    }

    private void newFirmContactRadioButton_Unchecked(object sender, RoutedEventArgs e)
    {
        NewContactWindowGridDisplay.Children.RemoveAt(1);
    }

ここで私の質問は、ラジオ ボタンのチェックを外したときに、作成した UserControls をアンロードする必要があるかどうか、およびアンロードする方法です。MSDN ドキュメントを検索したところ、親オブジェクトから remove メソッドを使用するとユーザー コントロールがアンロードされることがわかりました。その場合、誰かが3つのラジオボタンを何度もクリックした場合にNFC / NLC / NMC UserControlオブジェクトを大量に積み上げないように、さまざまな「チェックされていない」メソッドで使用しているコードは正しいですそしてまた?

これを私に説明できる人に感謝します:)

4

1 に答える 1

0

実際には、.Net メモリ管理の詳細を読んで、その仕組みを理解する必要があります。あなたの場合、UserControlsが何をしているかに依存しますか? システム リソースを使用している場合は、参照をUserControl unloadedイベントで破棄することをお勧めします。それ以外の場合GCは処理します。

この記事を読む: ガベージ コレクション: Microsoft .NET Framework の自動メモリ管理

また、あなたが行っている方法はあまり良くありません。なぜなら、イベントの処理などの設定など、UserControl でさらに多くのことを行う必要があることがすぐにわかるからです。これはコードで行うのが難しいでしょDataContextう。Style

于 2012-08-09T23:09:40.037 に答える