如何在wp7中加速动态添加用户控件

时间:2011-03-13 00:28:41

标签: performance windows-phone-7 grid

我在我的WP7应用程序中有一个动态构建的页面。我创建并添加了60个用户控件到网格,大约需要5秒钟。我需要找到一种加快速度的方法。

流程如下:

  1. 创建用户控件
  2. 添加新的网格行定义
  3. 设置控件行属性的值
  4. 将控件添加到grid.Children集合。
  5. 第4步是花时间。我猜我每次都这样做,视觉树就会被重建。

    在完成子集合更新后,有没有办法告诉网格只重建可视树?

    或者还有另一种更好的方法吗?

    UPDATE:WP7 Toolkit中的List Picker控件导致了问题。当我改为一个时,我自己写了在手机上显示页面的时间从25秒减少到1秒。

2 个答案:

答案 0 :(得分:1)

/您的目标是尝试减少更新visualtree的次数。

一些建议:

  • 默认情况下尝试在页面中包含(部分)项目,但只需根据您的需要更改其可见性。
  • 在代码中构建整个网格并一次性将其添加到页面中(而不是一次一行)
  • 根据您的内容,您可以尝试使用ListBox并交替使用每行的模板来显示不同的内容。

最适合您的技术取决于您实际添加到UI的内容。您需要进行测试,看看哪种方法最适合您。

答案 1 :(得分:1)

如果UI虚拟化(即ListBox)有帮助,则问题必须出在您的控件中。模板,绑定,转换器,使用Xaml而不是C#代码,不必要的Xaml构造(例如元素名称),过于复杂的可视树(例如不需要的网格)等 - 这些都会降低性能。

如果您怀疑增量可视树重建(我不这么认为),那么只需调试MeasureOverride / ArrangeOverride方法。

我猜this article可能会给你更多提示。我在那里描述了我们如何优化类似的复杂控件 - MonthCalendar有126个子控件。控制负载时间减少约。 5×!