将UserControl保留在内存中

时间:2016-12-01 00:02:38

标签: c# wpf

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

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

这就是我在内存中存储显示的最后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处于同一状态?

1 个答案:

答案 0 :(得分:-1)

尝试将应用程序迁移到MVVM模式怎么样?

每次访问以前的userControl时都不会重新创建ViewModel,因此状态可能相同,也不会出现内存问题。

如果您不习惯使用此模式,可以使用许多可用的工具包来启动,如MVVM Light,Caliburn.Micro,......