具有许多加载控件的Silverlight性能

giu*_*ius 10 silverlight performance datagrid caliburn.micro

我有一个带有许多DataGrids(来自Silverlight Toolkit)的SL应用程序,每个都有自己的视图.如果打开了几个DataGrids,则在视图之间进行更改(例如TabItems)需要很长时间(几秒钟)并冻结整个应用程序(UI线程).

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

我已经分析了该应用程序.它表明agcore.dll的SetValue函数是瓶颈.遗憾的是,调试符号不适用于负责绘图的Silverlight本机库.

问题不在DataGrid控件中 - 我试图用XCeed的网格替换它,并且更改视图时的性能更差.

你知道如何解决这个问题吗? 为什么更多打开控件会减慢其他控件?

我创建了一个显示此问题的示例:VS解决方案,现场演示

更新:在提供的示例上使用VS11分析器表明问题可能是多次调用MeasureOverride(对于每个DataGridCell,我猜).但是,为什么它会在其他地方加载更多控件时变慢?有没有办法改善表现?

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

giu*_*ius 5

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

快速链接到MVVM演示应用程序:原始固定