Silverlight性能与许多加载的控件

我有一个SL应用程序与许多DataGrids(从Silverlight工具包),每个都在自己的视图.如果打开了几个DataGrids,在视图之间切换(例如TabItems)需要很长时间(几秒钟),并冻结整个应用程序(UI线程).

加载的DataGrids越多,更改所需的时间越长.这些DataGrids可能会拖慢用户界面,这可能在应用程序中的其他位置,甚至在该时刻甚至不可见.但是一旦它们被打开(并加载了数据),它们会缓慢显示其他DataGrids.
请注意,DataGrids未被处理,然后重新创建,它们仍然保留在内存中,只有它们的父控件被隐藏并再次可见.

我已经分析了应用程序.这表明agcore.dll的SetValue功能是瓶颈.不幸的是,调试符号不适用于负责绘图的Silverlight本机库.

问题不在DataGrid控件中 – 我试图用XCeed的网格替换它,而在更改视图时的性能更糟.

你有什么想法如何解决这个问题?
为什么更多的打开的控件减慢其他控件?

我创建了一个示例来显示此问题:VS solution,live demo

更新:
在提供的示例上使用VS11分析器表明,该问题可能在MeasureOverride被多次调用(对于每个DataGridCell,我猜).但是呢,为什么呢更慢呢?有没有办法提高性能

更新2:
我应该提到我不在我的特定应用程序中使用TabControl.我使用Caliburn.Micro和ContentControl来显示当前活动的viewmodel.但是与TabControl相同的问题就是使用它来描述核心问题.

解决方法

所以,我遵循创建自定义控件的想法,结果是: http://www.baud.cz/blog/fast-switching-between-viewmodels-in-caliburn.micro.

快速链接到MVVM演示应用程序:OriginalFixed

相关文章

  WPF/E初步印象 修订记录: 2007-01-18      创建 2007-1-25      增加对几何体类的描述,修...
[最后更新:2009.09.14] 稳扎稳打 Silverlight 系列文章 Silverlight 1.0 稳扎稳打Silverlight(1) - 1....
WPF/E的正式版本Silverlight已经公布了,下表列出正式版所有的特性与.NET 3.0中WPF以及Flash/Flex的特性...
由于名称的关系, WPF与WPF/E一直被认为是类似的东西.其实两者除了呈现UI的部分使用的是共同语言XAML之外...
    由于名称的关系, WPF与WPF/E一直被认为是类似的东西.其实两者除了呈现UI的部分使用的是共同语言...
        Visual Studio "Orcas"有了好多新东西哦,太好了,今天看了一下,实在太屌了,从Sc...