我在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);
}
}
谢谢!
答案 0 :(得分:1)
这是否有意义/提高加载控件的性能?
是的,它确实有意义,但是有一些事情需要考虑。
可能最重要的是内存管理。您需要考虑在缓存视图时将使用多少内存。
想象一下场景:
您有一个Window
,其中DataContext
是一个视图模型,它已从数据库中加载了1000条记录。
现在,当您缓存此视图时,这些记录仍然会在内存中,即使它们没有被使用,也会占用原本会在其他地方使用的资源。这不是一个大规模的问题,因为现在的计算机有足够的内存。但是,您必须考虑您将如何处理此问题。
我建议您在关闭视图时释放所有资源。有效地执行Dispose
,而不实际完全处理视图模型。一旦视图再次相关,请在视图模型上执行设置(加载数据)。
它有不同的外观。我认为它没有正确使用ItemTemplateSelector。
考虑查看Sheridan's View Navigation Approach为视图模型定义DataTemplate
。