就速度和生成的通知量而言,是这段代码:
ObservableCollection<Foo> foo = new ObservableCollection<Foo>(bar);
this.SomeProperty = foo;
与:
相同this.SomeProperty = new ObservableCollection<Foo>();
foreach (var v in bar)
{
this.SomeProperty.Add(v);
}
如果它们相同,是否有可能以某种方式关闭生成的通知?
目的: 我正试图加速在Silverlight中显示Telerik RadChart。即使在设置了包含ObservableCollection的属性之后,似乎还需要一段时间才能显示(并在浏览器应用程序中冻结)。绘制图表后,一切正常。
答案 0 :(得分:7)
简介或测试它!根据文件, 添加,删除项目时发生PropertyChanged事件 更改,移动或刷新整个列表。因此,你可以 写一些只是订阅此事件的测试代码,看看是什么 发生。
Fast performing and thread safe observable collection - 如果是由于持续不断的OnChanged事件,请考虑仅在批量更新后触发 - 有人已为您完成此项工作
http://www.telerik.com/help/silverlight/radchart-performance-tips-and-tricks.html 特别针对您描述的关于页面一半的场景。他们的结论与2相同 - 事实上,代码看起来非常相似: - )
如果在实际发生绑定之前发生了冻结,那么我会确保延迟实际上不是基于渲染的,或者是因为另一种行为(比如加载集合所花费的时间)。同样,分析是你的朋友。