【问题标题】:new ObservableCollection vs adding items in a loop新的 ObservableCollection 与在循环中添加项目
【发布时间】:2012-02-24 07:10:06
【问题描述】:

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

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 的属性,似乎也需要一段时间才能显示(并冻结浏览器应用程序)。绘制图表后,一切正常。

【问题讨论】:

    标签: c# silverlight telerik observablecollection radchart


    【解决方案1】:
    1. 对其进行分析或测试!根据文档, PropertyChanged 事件在添加、删除项目时发生, 更改、移动或刷新整个列表。因此,您可以 编写一些只订阅这个事件的测试代码,看看是什么 发生。

    2. Fast performing and thread safe observable collection - 如果是由于 OnChanged 事件的不断涌现,请考虑仅在批量更新后触发 - 有人已经为您完成了这项工作

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

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

    【讨论】:

    • 在构造函数期间该事件不会被触发,因为不可能事先订阅它(因此触发它是没有用的,因为肯定没有监听器)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    相关资源
    最近更新 更多