我想知道为什么根据此article和observable集合绑定显着更快(20毫秒比1685毫秒,这是800X更快)比列表<>集合在WPF中。我看着的ObservableCollection的内部,它使用一个List,因为它是存储集合对象(我用反射镜,看到这个在构造函数)ObservableCollection数据绑定性能
public Collection()
{
this.items = new List<T>();
}
所以这是怎么回事呢?
我想知道为什么根据此article和observable集合绑定显着更快(20毫秒比1685毫秒,这是800X更快)比列表<>集合在WPF中。我看着的ObservableCollection的内部,它使用一个List,因为它是存储集合对象(我用反射镜,看到这个在构造函数)ObservableCollection数据绑定性能
public Collection()
{
this.items = new List<T>();
}
所以这是怎么回事呢?
该文章中的比较不在两个简单的绑定操作之间,这些测量指的是将单个项目添加到已绑定到List<T>
或ObservableCollection<T>
的WPF ListBox
的场景。
正如作者的评论:
...的CLR
List<T>
对象 不会自动养 集合更改事件。为了 得到ListBox
拿起 变化,你将不得不重新 您的员工的列表,并重新连接 它的ListBox
的ItemsSource
财产。尽管此解决方案有效,但它会带来巨大的性能影响。 每次将 的ListBox
重新分配给新对象时,ListBox
首先丢弃其先前的 项并重新生成其整个列表。
这解释了性能差异。尽管ObservableCollection<T>
由List<T>
提供支持,但它实现了INotifyCollectionChanged
接口,该接口使所有额外处理不再需要。
更确切地说INotifyCollectionChanged是由ObservableCollection实现的 –
2009-06-17 19:20:47