Silverlight WP7 ListBoxItem内容演示器测量时间

Silverlight WP7 ListBoxItem内容演示器测量时间,silverlight,windows-phone-7,Silverlight,Windows Phone 7,希望有人能帮助我,或者至少能给我一点启发。芒果测试版工具发布后,我对新的WP7档案器玩了很多,有一件事确实让我感到困扰 每一个带有稍微复杂一点的项目的列表框都要花很长时间才能绘制出来。例如,一个列表框包含由边框->网格->6XTEXTBOKS(每个显示单个符号)组成的项,每个列表框项需要303ms。其中288毫秒用于ListBoxItem的ContentPresenter度量时间(不包括) 我知道这项措施是一种昂贵的操作,但这仍然是超越疯狂。如有任何想法,将不胜感激 确保您的数据在异步操作中已完

希望有人能帮助我,或者至少能给我一点启发。芒果测试版工具发布后,我对新的WP7档案器玩了很多,有一件事确实让我感到困扰

每一个带有稍微复杂一点的项目的列表框都要花很长时间才能绘制出来。例如,一个列表框包含由边框->网格->6XTEXTBOKS(每个显示单个符号)组成的项,每个列表框项需要303ms。其中288毫秒用于ListBoxItem的ContentPresenter度量时间(不包括)

我知道这项措施是一种昂贵的操作,但这仍然是超越疯狂。如有任何想法,将不胜感激

  • 确保您的数据在异步操作中已完全加载,并且UI线程上仅运行向ListBox添加项

  • 确保在模板中使用网格而不是StackPanel

  • 以下文章也非常有用:


    我只能确认测量溢出使用的是最耗时的操作。(而且你不需要一个剖析器来找出答案。)我只能猜测为什么要花这么长时间

    首先,MeasureOverride递归地遍历ListBoxItem的可视树。在这个调用链的末尾,可能有一个对本机代码的调用,返回实际大小

    因此,保持简单的项目结构至关重要

    你的结构似乎过于复杂了。若您查看TextBox模板,您将看到它的结构是Grid>Border>ContentPresenter。我无法判断ContentPresenter的背后是什么,因为我不知道你的代码,我只是想知道你为什么不使用TextBlock(如果可能的话)——它的效率要高得多

    作为一个实验,我将尝试实现MyListBoxItem.MeasureOverride并返回固定大小,而不调用基本实现。我不知道它是否有效,但它可能会带来令人惊讶的结果

    在实现自己的列表项时,您可能要调查的第二件事是调用MeasureOverride的频率。(或者只查看探查器输出。)如果调用的数量太多,那么布局可能需要更多的循环。可能存在一些相互冲突的尺寸要求,需要通过几个步骤来解决


    你提到了40项。这不应该发挥任何作用。ListBox围绕ListBoxItem的3个屏幕进行构建,其余的项根据需要进行构建(大多数情况下重复使用)。如果测量时间因项目编号的增加而增加,则在数据实现中查找问题。

    谢谢,但数据是本地计算的,最终不是问题,因为生成数据只需几毫秒。我真的很想听听关于措施问题的一些想法。您是否遵循了我包含的链接中的建议?我一般都会遵循这些建议,但在我提交的两个应用程序中还没有出现重大问题。在过去的几个月里,我遇到了大多数建议,并尝试了它们,但都没有成功。大小是固定的,没有数据被下载,我有一些项目(大约40个列表框项目)。仍然测量phaze需要更长的时间。谢谢你的回复。这40个项目实际上在一个屏幕中(有一个包装面板)。顺便说一句,我使用的是文本块,很抱歉造成混淆。尺寸很好,没有人叫它很多次,所以一定有别的东西。我尝试过手动设置所有可能的尺寸,但没有效果。我将在抓捕方面做更多的尝试,并可能尝试实施该措施,看看我是否可以改进它。再次感谢你的建议。