ObservableCollection, Связывающий с данными производительность

В C литерал с плавающей точкой, такой как 0.1, является двойным, а не плавающим. Поскольку типы сравниваемых элементов данных различны, сравнение выполняется в более точном типе (double). Во всех реализациях, о которых я знаю, float имеет более короткое представление, чем double (обычно выражается примерно как 6 против 14 десятичных знаков). Кроме того, арифметика в двоичном виде, а 1/10 не имеет точного представления в двоичном.

Таким образом, вы берете число с плавающей запятой 0.1, которое теряет точность, удваиваете его, и ожидаете, что оно сравнится с двойным 0,1, что теряет меньшую точность.

Предположим, мы делали это в десятичном формате, с плавающей точкой, состоящей из трех цифр и двойной, равной шести, и мы сравнивали с 1/3.

У нас есть сохраненное значение с плавающей запятой, равное 0,333. Мы сравниваем его с двойным значением 0,333333. Мы конвертируем число с плавающей запятой в 0,333 в удвоенное значение 0,333000 и находим его другим.

5
задан Jose 17 June 2009 в 15:16
поделиться

1 ответ

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

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

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

Это объясняет разницу в производительности. Несмотря на то, что ObservableCollection поддерживается списком List , он реализует интерфейс INotifyCollectionChanged , который устраняет необходимость в дополнительной обработке.

8
ответ дан 14 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: