2009-06-17 65 views
5

我想知道为什么根据此article和observable集合绑定显着更快(20毫秒比1685毫秒,这是800X更快)比列表<>集合在WPF中。我看着的ObservableCollection的内部,它使用一个List,因为它是存储集合对象(我用反射镜,看到这个在构造函数)ObservableCollection数据绑定性能

public Collection() 
{ 
    this.items = new List<T>(); 
} 

所以这是怎么回事呢?

回答

8

该文章中的比较不在两个简单的绑定操作之间,这些测量指的是将单个项目添加到已绑定到List<T>ObservableCollection<T>的WPF ListBox的场景。

正如作者的评论:

...的CLR List<T>对象 不会自动养 集合更改事件。为了 得到ListBox拿起 变化,你将不得不重新 您的员工的列表,并重新连接 它的 ListBoxItemsSource财产。尽管此解决方案有效,但它会带来巨大的性能影响。 每次将 的ListBox重新分配给新对象时, ListBox首先丢弃其先前的 项并重新生成其整个列表。

这解释了性能差异。尽管ObservableCollection<T>List<T>提供支持,但它实现了INotifyCollectionChanged接口,该接口使所有额外处理不再需要。

+2

更确切地说INotifyCollectionChanged是由ObservableCollection实现的 2009-06-17 19:20:47

相关问题