Contentcontrol.Content内存泄漏中的WPF Usercontrol

时间:2016-02-26 11:37:45

标签: c# wpf xaml memory-leaks user-controls

问题是我的prism,autofac .NET 4.5.1 WPF应用程序中的内存泄漏。我减少了问题,问题也在于没有prism和autofac的原生WPF应用程序。

启动时,应用程序使用34 MB RAM。我在主窗口的contentcontrol中设置了一个具有大ram分配的usercontrol的新实例。 ram最高可达900 MB。现在我将清理我的ui,我测试清除usercontrol中的内部集合,contentcontrol的内容设置为null ...但是ram是140 MB。如何在启动和清理之间释放ram。

当我创建usercontrol并且没有在contentcontrol的内容中设置它时,ram变为38 MB。那没问题。可以发布"完成" ram当我在另一个控件中使用usercontrol时?

主窗口:

<ContentControl x:Name="myContentControl"></ContentControl>

代码背后:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    this.myContentControl.Content = new UserControl1();
}

private void Button_Click_2(object sender, RoutedEventArgs e)
{
    this.myContentControl.Content = null;
    GC.Collect();
}

usercontrol:

<Grid>
    <DataGrid x:Name="myTestListView" Background="Purple" Height="280></DataGrid>
</Grid>

代码:

public partial class UserControl1 : UserControl
{
    private List<string> Testitems = new List<string>(); 

    public UserControl1()
    {
        InitializeComponent();
        this.Testitems = new List<string>();
        for (int i = 0; i < 1000000; i++) this.Testitems.Add(i.ToString());
        this.myTestListView.ItemsSource = this.Testitems;
    }
}

1 个答案:

答案 0 :(得分:0)

考虑用Usercontrol1替换ObservableCollection集合支持字段,泄漏将消失。