Silverlight具有大量对象的性能组织结构图

Silverlight具有大量对象的性能组织结构图,silverlight,Silverlight,我正在处理一个组织结构图项目(SL 3),我看到当图表在2000个节点左右构建时,UI线程挂起,当它呈现时,需要大约一分钟,然后FPS下降到爬行状态 下面是代码流。 Page.xaml.cs调用返回AD用户列表的wcf服务。然后,我们使用Linq构建一个节点集合,以绑定到Orgchart.cs OrgChart.cs是一个画布,显示节点和连接线的集合 Node.cs是一个画布,其用户数据可以包含子节点 NodeContent.xaml是一个具有边框的用户控件,因此我可以设置背景、显示用户数据的文

我正在处理一个组织结构图项目(SL 3),我看到当图表在2000个节点左右构建时,UI线程挂起,当它呈现时,需要大约一分钟,然后FPS下降到爬行状态

下面是代码流。 Page.xaml.cs调用返回AD用户列表的wcf服务。然后,我们使用Linq构建一个节点集合,以绑定到Orgchart.cs

OrgChart.cs是一个画布,显示节点和连接线的集合

Node.cs是一个画布,其用户数据可以包含子节点

NodeContent.xaml是一个具有边框的用户控件,因此我可以设置背景、显示用户数据的文本块、处理选定和扩展节点的事件,以及在选择或扩展节点时调整节点大小的情节提要;在加载xaml的部分,似乎是执行命中发生的地方

System.Windows.Application.LoadComponent(这是新的System.Uri(“/Silverlight.Custom;component/NodeContent.xaml”,System.UriKind.Relative))

所以我想我有两个问题

  • 在绘制节点时,线程可以帮助UI线程挂起吗
  • 调用此用户控件时如何避免命中
  • 任何人如能提供任何建议或指导,将不胜感激

    谢谢,
    KC

    至于使用UI线程做任何事情都不会有任何效果。您可能能够在后台线程上执行一些数据处理,但如果您在后台线程上处理任何数据绑定到UI的对象,您就是在找麻烦。您将真正需要从UI中分离这项工作,然后重新调用它


    我的猜测是Siverlight只是需要一段时间来绘制所有节点。我们有一个应用程序,它绘制了大约100个相当丰富的小部件。只有大约20或30个小部件在ItemsControl主机的包装面板中可见。通过使用虚拟化包装面板,我们最终获得了更好的性能,该面板在需要隐藏的UI元素之前不会实际实例化它们。这里有一些折衷,我们仍在解决这个问题,但这样页面加载速度要快得多。您可以采取类似的策略来绘制节点,只加载需要可见的节点。此外,还可以将树的部分以块的形式加载到绘图曲面上。也许先画出前100条记录,然后再画下100条记录,以此类推。

    在我看来,您的UI有一个自然点,可以通过按需加载节点UI来比较负载

    您有可以展开和折叠的节点。仅加载当前展开的节点的UI。当用户展开节点时,然后在该点加载其子节点的UI