我的应用程序是一个带有主网格的窗口,其中包含我的页面(用户控件)。
我希望能够在显示的先前用户控件的历史记录中导航。
这就是我在内存中存储显示的最后30个用户控件的原因。显示新的UC时,我的代码看起来像这样:
.method assembly hidebysig
instance int32 '<Main>b__0_0' (
int32 a
) cil managed
{
// Method begins at RVA 0x20ac
// Code size 4 (0x4)
.maxstack 8
IL_0000: ldarg.1
IL_0001: ldc.i4.1
IL_0002: add
IL_0003: ret
} // end of method '<>c'::'<Main>b__0_0'
我的所有“MyHistoryPage”都存储在静态列表中。
这很好用,我能够让以前的Ucs处于相同的状态(相同的类别,相同的复选框选中,相同的滚动,相同的选项卡等),并为用户提供良好的体验。
然而,它似乎导致内存泄漏或至少它似乎减慢了我的应用程序。鼠标悬停效果变得越来越慢。
Dot Memory明显告诉我使用的内存变得更大。
将大量UI组件存储在内存中以便以后使用它是否合适?什么是更好的解决方案来管理历史并使我的UC处于同一状态?
答案 0 :(得分:-1)
尝试将应用程序迁移到MVVM模式怎么样?
每次访问以前的userControl时都不会重新创建ViewModel,因此状态可能相同,也不会出现内存问题。
如果您不习惯使用此模式,可以使用许多可用的工具包来启动,如MVVM Light,Caliburn.Micro,......