【问题标题】:WPF Usercontrol in Contentcontrol.Content Memory LeakContentcontrol.Content 内存泄漏中的 WPF 用户控件
【发布时间】:2016-06-09 14:37:14
【问题描述】:

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

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

当我创建用户控件并且没有在内容控件的内容中设置它时,内存变为 38 MB。那没问题。当我在另一个控件中使用用户控件时,是否可以释放“完整”的 ram?

主窗口:

<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();
}

用户控件:

<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;
    }
}

【问题讨论】:

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


    【解决方案1】:

    考虑用ObservableCollection 替换您的Usercontrol1 集合支持字段,泄漏就会消失。

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多