0

我是 WPF 的新手,并且来自 C++ 背景,所以我可能在这里担心内存管理太多。

无论如何,我有一个 UserControl (NewContact),它有一个 2 列的网格,上列显示 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);
    }

现在我的问题是,当未选中单选按钮时,我是否应该以及如何卸载我创建的 UserControl。我在 MSDN 文档中进行了一些搜索,发现使用父对象中的 remove 方法会卸载用户控件。如果是这种情况,我在各种“未经检查”的方法中使用的代码是正确的,以免在有人一遍又一遍地点击三个单选按钮时堆积大量 NFC/NLC/NMC UserControl 对象一遍又一遍?

非常感谢任何可以向我解释这一点的人:)

4

1 回答 1

0

实际上,您需要阅读有关 .Net 内存管理的更多信息并了解它的工作原理。在您的情况下,这取决于您的 UserControls 在做什么?如果他们正在使用系统资源,最好在UserControl unloaded事件中处理他们的引用,否则GC会照顾他们。

阅读本文: 垃圾收集:Microsoft .NET Framework 中的自动内存管理

而且你的方式也不是很好,因为很快你会发现你需要对你的 UserControl 做更多的事情,比如设置它的DataContext, Styles 处理事件等等......这很难用代码来做。

于 2012-08-09T23:09:40.037 回答