我必须在WPF两个视图之间切换。 我有一个使用的ViewModels推断取决于视图模型绘制该视图一个DataTemplate。 简而言之:
<DataTemplate DataType="{x:Type ..:RedScreenViewModel}">
<...:RedScreenViewModel/>
</DataTemplate>
心血来潮,我决定视图之间快速切换..和WPF应用程序的内存使用量猛增至2GB。 现在你可能会说,在现实生活中,没有人会做什么,我做到了。 但我想知道如何释放已分配的内存。 卸载绝对叫,我已经从任何事件处理程序退订。 但它并不能帮助。 是否DevExpress的或WPF有一个属性,它可以告诉.NET处置UserControl的? 那些我发现的DevExpress但做小人物有:
DisposeOnWindowClosing
DestroyOnClosingChildren
该视图创建是非常复杂的,我已经在努力节省内存改组布局。 但是,同样的增长。 建议将是巨大的感谢。
编辑:析构函数不叫然而...
这是你如何处置嵌套一个ItemsControl内部的用户控件(在这种情况下:一个列表框)
public void Dispose()
{
if (this.listb != null)
{
for (int count = 0; count < this.listb.Items.Count; count++)
{
DependencyObject container = this.listb.ItemContainerGenerator.ContainerFromIndex(count);
UserControl userControl = container.GetVisualDescendent<UserControl>();
IDisposable controlToPotentiallyDispose = userControl as IDisposable;
if (controlToPotentiallyDispose != null)
controlToPotentiallyDispose.Dispose();
controlToPotentiallyDispose = null;
}
}
if (this.ViewModel != null)
{
this.ViewModel.Dispose();
this.ViewModel = null;
}
this.listb = null;
}
需要注意的是数组listB是x:列表框从寻找项目的名称。
此外,该Dispose()方法应该是在xaml.cs应该叫做当你不需要的观点了。
HTH,
章。