Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在内存中保持用户控制_C#_Wpf - Fatal编程技术网

C# 在内存中保持用户控制

C# 在内存中保持用户控制,c#,wpf,C#,Wpf,我的应用程序是一个带有主网格的窗口,其中将包含我的页面(用户控件) 我希望能够在显示的以前用户控件的历史记录中导航 这就是为什么我将显示的最后30个用户控件存储在内存中。显示新UC时,我的代码如下所示: MyHistoryPage page = new MyHistoryPage(); page.AssociatedUC = (UserControl)this.mainGrid.Children[0]; this.mainGrid.Children.Clear(); this.mainGrid.

我的应用程序是一个带有主网格的窗口,其中将包含我的页面(用户控件)

我希望能够在显示的以前用户控件的历史记录中导航

这就是为什么我将显示的最后30个用户控件存储在内存中。显示新UC时,我的代码如下所示:

MyHistoryPage page = new MyHistoryPage();
page.AssociatedUC = (UserControl)this.mainGrid.Children[0];
this.mainGrid.Children.Clear();
this.mainGrid.Children.Add(new MyCustomUC());
我所有的“MyHistoryPage”都存储在一个静态列表中

这非常有效,我能够在相同的状态下获得以前的Ucs(相同的排序、选中相同的复选框、相同的滚动、选择相同的选项卡等),并为用户提供良好的体验

然而,它似乎会导致内存泄漏,或者至少会减慢我的应用程序的速度。鼠标悬停的效果越来越慢

点记忆显然告诉我所用的记忆已经变大了


在内存中存储大量的UI组件以便以后使用,这样好吗?管理历史记录并使我的UCs处于相同状态的更好解决方案是什么?

尝试将应用程序迁移到MVVM模式如何

ViewModels不会在每次访问以前的userControl时重新创建,因此状态可能相同,并且不会出现内存问题


如果您不习惯使用此模式,则可以使用许多可用的工具包开始,如MVVM Light、Caliburn.Micro、

也许您可以对控件进行序列化和反序列化。