我有一个Silverlight应用程序,我定期加载更多数据并将其作为UserControls添加到页面中。我在一个集合中加载了大约25个对象,并为每个对象创建一个UserControl。
这最终花费了相当多的时间!在UI中加载25个对象纯粹需要50-150ms。这使得我的动画相当不稳定,这是非常不可取的。
有没有办法加快UserControls的加载?我宁愿不添加某种缓冲层,每秒加载X个项目。我还宁愿不预先加载一些UI对象的大缓冲区,我会根据有多少数据进行zombiefy /重用。但是,目前我还想不出任何其他选项。
UserControls本身相当简单,我很惊讶他们加载速度这么慢。基本上,我只是创建它们(在构造函数中不做任何代价),设置DataContext并将它们添加到父画布中。
这应该是那么慢吗?有什么明显的东西我可以在这里失踪吗?我可以以某种方式将其与动画时间分离吗?我猜不是 - 用户界面几乎肯定是单线程的。
答案 0 :(得分:0)
我不完全确定您的动画如何与创建UI对象相关联,所以也许我错过了一些东西。只是为了提前,我所知道的唯一解决方案是你说过你不想追求的事情。我会在开始动画之前创建新的UI对象,并将其可见性设置为折叠。然后,您可以让动画在适当的时间修改UI元素Visibility,使其可见。创建UI对象(你提到的50-150毫秒听起来并不完全脱节,不知道对象做了什么)是你无法摆脱的开销。您可以确保UI对象没有在构造函数或Loaded事件处理程序中执行任何不必要的工作。我对性能问题的一般思考是你需要测试,而不是理论,所以我会尝试多个选项,看看哪个能给你带来理想的性能。
答案 1 :(得分:0)
经过长时间的尝试各种项目的各种解决方案,我唯一可以说的是它真的很慢。我没有找到任何其他解决方案,除了简单地创建尽可能少的对象,无论何时何地,无处不在。
创建UI对象非常慢。这似乎是一个悲伤的事实。