WPF Usercontrol in Contentcontrol.Content Memory Leak

本文关键字:Memory Leak Content Contentcontrol Usercontrol in WPF | 更新日期: 2023-09-27 18:36:25

问题是我的棱镜autofac .NET 4.5.1 WPF应用程序中的内存泄漏。我减少了这个问题,问题也出在没有棱镜和自动法克的本机 WPF 应用程序中。

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

当我创建用户控件并且未在内容控件的内容中设置它时,RAM 将变为 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;
    }
}

WPF Usercontrol in Contentcontrol.Content Memory Leak

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