微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐