我是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对象,如果有人在一遍又一遍地点击三个单选按钮又一次?
非常感谢能够向我解释这一点的任何人:)
答案 0 :(得分:0)
实际上你需要阅读更多关于.Net内存管理的内容,并了解它是如何工作的。在您的情况下,它取决于您的UserControl正在做什么?如果他们使用系统资源,最好在UserControl
unloaded
个事件中处理他们的引用,否则GC
会处理它们。
阅读这篇文章: Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework
你前进的方式也不是很好,因为很快就会发现你需要对你的UserControl做更多的事情,比如设置DataContext
,Style
处理事件等等......这很难用代码完成。