Silverlight性能与许多加载的控件

Silverlight性能与许多加载的控件,第1张

概述我有一个SL应用程序与许多DataGrids(从Silverlight工具包),每个都在自己的视图.如果打开了几个DataGrids,在视图之间切换(例如TabItems)需要很长时间(几秒钟),并冻结整个应用程序(UI线程). 加载的DataGrids越多,更改所需的时间越长.这些DataGrids可能会拖慢用户界面,这可能在应用程序中的其他位置,甚至在该时刻甚至不可见.但是一旦它们被打开(并加 我有一个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演示应用程序:Original和Fixed

总结

以上是内存溢出为你收集整理的Silverlight性能与许多加载的控件全部内容,希望文章能够帮你解决Silverlight性能与许多加载的控件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1002058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存