usercontrol wpf静态内存

时间:2012-08-09 22:51:53

标签: c# wpf user-controls

我是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);
    }

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

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

1 个答案:

答案 0 :(得分:0)

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

阅读这篇文章: Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework

你前进的方式也不是很好,因为很快就会发现你需要对你的UserControl做更多的事情,比如设置DataContextStyle处理事件等等......这很难用代码完成。