ObservableCollection Производительность привязки данных

Я хотел бы знать, почему в соответствии с этимстатья и наблюдаемая коллекция связывается значительно быстрее (20 мс против 1685 мс, что в 800 раз быстрее), чем список & lt; & gt; Коллекция в WPF. Я посмотрел на внутреннюю часть ObservableCollection, и он использует List как объект коллекции хранения (я использовал отражатель и увидел это в конструкторе)

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

Так что здесь происходит?

Ответы на вопрос(1)

Решение Вопроса

ия, эти измерения относятся к сценарию, в котором вы добавляете один элемент в WPF.ListBox это уже связано либоList<T> илиObservableCollection<T>.

Как отмечает автор:

...the CLR List<T> object does not automatically raise a collection changed event. In order to get the ListBox to pick up the changes, you would have to recreate your list of employees and re-attach it to the ItemsSource property of the ListBox. While this solution works, it introduces a huge performance impact. Each time you reassign the ItemsSource of ListBox to a new object, the ListBox first throws away its previous items and regenerates its entire list.

Это объясняет разницу в производительности. Даже еслиObservableCollection<T> поддерживаетсяList<T>это реализуетINotifyCollectionChanged интерфейс, который делает ненужной дополнительную обработку.

 17 июн. 2009 г., 21:50
Спасибо, Брайс - исправлено.
 Jose18 июн. 2009 г., 00:02
Итак, если у нас есть список & lt; T & gt; из 1000 элементов и коллекции ObservableCollection & lt; T & gt; из 1000 предметов они заняли бы столько же времени, верно? Это имеет смысл.
 18 июн. 2009 г., 02:04
Если я правильно понимаю, это правильно - при прочих равных условиях (& lt; T & gt; один и тот же тип, при доступе к связанному свойству и т. Д. Не происходит ничего сумасшедшего), они будут занимать такое же количество времени.
 17 июн. 2009 г., 21:20
Точнее, INotifyCollectionChanged реализуется ObservableCollection & lt; T & gt;

Ваш ответ на вопрос