在XAML中缓存视图会改变外观吗?

时间:2015-06-18 03:01:44

标签: xaml caching windows-store-apps

我在XAML中缓存视图以提高性能(不需要再次加载控件)。这是否有意义/提高加载控件的性能?

问题是,虽然我正在缓存/加载相同的东西,但是当我使用缓存视图时,它看起来有不同的外观。我认为它没有正确使用ItemTemplateSelector。

    var stringKey = GetMIVMString(mivm);
    if (_MyCachedView.ContainsKey(stringKey))
    {
        MainView.Content = _MyCachedView[stringKey];
    }

else
{
    var view = new MyInnerView() { DataContext = mivm };
    MainView.Content = view;

    var itemToCache = MainView.Content as MyInnerView;
    if (itemToCache != null)
    {
        _MyCachedView.Add(stringKey, itemToCache);
    }
}

谢谢!

1 个答案:

答案 0 :(得分:1)

  

这是否有意义/提高加载控件的性能?

是的,它确实有意义,但是有一些事情需要考虑。

可能最重要的是内存管理。您需要考虑在缓存视图时将使用多少内存。

想象一下场景:

您有一个Window,其中DataContext是一个视图模型,它已从数据库中加载了1000条记录。

现在,当您缓存此视图时,这些记录仍然会在内存中,即使它们没有被使用,也会占用原本会在其他地方使用的资源。这不是一个大规模的问题,因为现在的计算机有足够的内存。但是,您必须考虑您将如何处理此问题。

我建议您在关闭视图时释放所有资源。有效地执行Dispose,而不实际完全处理视图模型。一旦视图再次相关,请在视图模型上执行设置(加载数据)。

  

它有不同的外观。我认为它没有正确使用ItemTemplateSelector。

考虑查看Sheridan's View Navigation Approach为视图模型定义DataTemplate