ObservableCollection Производительность привязки данных - PullRequest
5 голосов
/ 17 июня 2009

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

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

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

1 Ответ

8 голосов
/ 17 июня 2009

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

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

... объект CLR List<T> не поднимает автоматически коллекция изменила событие. Чтобы получить ListBox, чтобы забрать изменения, вам придется воссоздать свой список сотрудников и повторно прикрепить это к ItemsSource свойству ListBox. Пока это решение работает, оно представляет огромное влияние на производительность. Каждый раз, когда вы переназначаете ItemsSource ListBox на новый объект, ListBox сначала выбрасывает свой предыдущий предметов и восстанавливает весь его список.

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

...