5

就速度和生成的通知数量而言,这段代码是:

ObservableCollection<Foo> foo = new ObservableCollection<Foo>(bar);
this.SomeProperty = foo;

相同:

this.SomeProperty = new ObservableCollection<Foo>();

foreach (var v in bar) 
{
    this.SomeProperty.Add(v);
}

如果它们相同,是否可以以某种方式关闭生成的通知?

目标: 我正在尝试加快 Telerik RadChart 在 Silverlight 中的显示速度。即使设置了包含 ObservableCollection 的属性,似乎也需要一段时间才能显示(并冻结浏览器应用程序)。绘制图表后,一切正常。

4

1 回答 1

7
  1. 配置它或测试它!根据文档, PropertyChanged事件在添加、删除、更改、移动或刷新整个列表时发生。因此,您可以编写一些仅订阅此事件的测试代码,看看会发生什么。

  2. 快速执行和线程安全的可观察集合- 如果是由于 OnChanged 事件的不断涌现,请考虑仅在批量更新后触发 - 有人已经为您完成了这项工作

  3. http://www.telerik.com/help/silverlight/radchart-performance-tips-and-tricks.html 专门处理您在页面中间描述的场景。他们的结论与 2 相同——事实上,代码看起来非常相似 :-)

如果在绑定实际发生之前发生冻结,那么我将确保延迟实际上不是基于渲染或由于另一个活动(例如加载集合所花费的时间)。同样,分析是您的朋友。

于 2012-02-01T15:50:29.800 回答