我必须在WPF中的两个视图之间切换。我有一个DataTemplate,它使用ViewModels根据ViewModel推断要绘制的视图。简而言之:
<DataTemplate DataType="{x:Type ..:RedScreenViewModel}">
<...:RedScreenViewModel/>
</DataTemplate>
一时兴起,我决定在视图之间快速切换..而且WPF应用程序的内存使用率高达2GB。现在你可能会争辩说,在现实生活中,没有人会做我做过的事情。但我想知道如何释放分配的内存。卸载肯定被称为,我已从任何事件处理程序取消订阅。 但它没有帮助。 DevExpress或WPF是否具有可以告诉.NET处理usercontrol的属性? 我找到了DevExpress,但是zilch是:
DisposeOnWindowClosing
DestroyOnClosingChildren
创建的视图非常复杂,我重新组织了布局以节省内存。但同样的增加。 建议非常感谢。
编辑: 然而,析构函数不会被调用...
答案 0 :(得分:0)
这就是你如何处理嵌套在ItemsControl中的UserControl(在这种情况下:一个ListBox)
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是用于查找项目的ListBox的名称。
此外,这个Dispose()方法应该在xaml.cs中,并且只要你不再需要视图就应该调用它。
HTH,
巴布。