Я должен отобразить много строк в сетке, добавленной в довольно высокой частоте (до 10 строк в секунду в некоторых случаях), я выбрал ListView, потому что я принимаю, самое быстрое управление сеткой в WPF. (конечно, намного быстрее, чем GridView)
Загрузка ЦП становится довольно высокой после пары, сто тысяч объектов были добавлены, и они продолжают входить. Это довольно удивительно, поскольку ListView представляет только видимые строки, таким образом, не должно иметь значения, сколько добавляется всего.
Мой первый подход связывал его с ObservableCollection, но через некоторое время, загрузка ЦП повышается, и целое Окно становится нервным.
Чем я пытался связать его с обычным Списком, который, кажется, быстрее, однако я действительно должен назвать.Refresh () в списке часто, который через некоторое время хлопает ЦП также.
Чем я делал попытку разделения на подклассы, ObservableCollection для разделения на блоки вставляет надежду, что пакетная обработка их улучшила бы рабочую нагрузку CPU производительности/уменьшения, но этот подход, кажется, требует вызова CollectionView. Обновление, которое совпадает со Сбросом вызова () на наборе, и также неэффективный, когда существует много объектов в наборе.
Очистка observablecollection и, чем вызов myListView. Объекты. Обновление () для возвращения его вниз 0 возвращает использование CPU начальной точке.
Запуск исчерпать идеи здесь.. Снова, моя цель здесь, состоит в том, чтобы добавить/отобразить много объектов и отобразить сетку на 8 столбцов самым производительным способом.. ListView кажется хорошим, просто должны быть некоторые способы, которыми я мог далее настроить его..
ОБНОВЛЕНИЕ
после профилирования, строк ObservableCollection 800k в сетке, большая часть CPU интенсивная работа сделана:
хотя в зависимости от сессии те числа варьируются значительно..
ОБНОВЛЕНИЕ 2.. хорошо BindingList, кажется, явный победитель здесь.
вот являются результаты (в галочках) бок о бок с 1 миллионом строк каждым (и добавление 10 объектов в секунду):
ObservableCollection: http://i.imgur.com/7ZoSv.png
BindingList http://i.imgur.com/jm5qF.png
Вы видите полное понижение активности ЦП и приблизительно половины галочек, требуемых обработать дерево в Привязке случая Списка! Моя благодарность Akash для этой прекрасной идеи.
Вместо использования ObservableCollection я предлагаю класс BindingList, вы можете сделать что-то вроде этого ..
BindingList<string> list = new BindingList<string>();
list.AllowEdit = true;
list.AllowNew = true;
list.AllowRemove = true;
// set the list as items source
itemCollection.ItemsSource = list;
// add many items...
// disable UI updation
list.RaiseListChangedEvents = false;
for each(string s in MyCollection){
list.Add(s);
}
// after all.. update the UI with following
list.RaiseListChangedEvents = true;
list.ResetBindings(); // this forces update of entire list
Вы можете включать / отключать обновление даже партиями, вместо того, чтобы добавлять все сразу, BindingList работает лучше, чем ObservableCollection в весь мой пользовательский интерфейс, мне интересно, почему везде люди больше говорят о ObservableCollection, когда BindingList действительно заменяет ObservableCollection.