Мне нужно отображать множество строк в сетке, добавленной с довольно высокой частотой (в некоторых случаях до 10 строк в секунду), я выбрал ListView, потому что я предполагаю, что это самый быстрый элемент управления сеткой в WPF.(конечно, намного быстрее, чем GridView)
Загрузка ЦП становится довольно высокой после добавления нескольких сотен тысяч элементов, и они продолжают поступать. Это довольно удивительно, поскольку ListView отображает только видимые строки, поэтому он не долженнезависимо от того, сколько всего добавлено.
Мой первый подход состоял в том, чтобы связать его с ObservableCollection, но через некоторое время загрузка ЦП возросла, и все окно стало нервным.
Чем я пытался привязать его к обычному списку, который выглядит быстрее, однако мне действительно нужно часто вызывать .Refresh () в списке, который через некоторое время также загружает процессор.
Чем я пытался создать подкласс ObservableCollection для вставок чанков, надеясь, что их пакетирование улучшит производительность / уменьшит нагрузку на процессор, но этот подход требует вызова CollectionView.Refresh, который аналогичен вызову Reset () о коллекции, а также неэффективно, когда в коллекции много предметов.
Очистка наблюдаемой коллекции и затем вызов myListView.Items.Refresh () для ее возврата к нулю возвращает процессор к начальной точке.
Начинаем исчерпывать идеи здесь .. Опять же, моя цель здесь - добавить / отобразить множество элементов и отобразить сетку из 8 столбцов наиболее эффективным способом. ListView кажется хорошим, просто нужнонекоторые способы, которыми я мог бы далее настроить это ..
ОБНОВЛЕНИЕ
после профилирования, ObservableCollection 800k строк в сетке, наиболее интенсивная работа процессора выполняется:
- (75%) System.Windows.Media.MediaContext.RenderMessageHandler (объект resizedCompositionTarget)
- (20%) ObservableCollection.OnCollectionChanged (NotifyCoolectionChanged ..)
хотя в зависимости от сеанса эти цифры сильно различаются ..
ОБНОВЛЕНИЕ 2 ... хорошо BindingList здесь явный победитель.
вот результаты (в тиках)бок о бок с 1 миллионом строк (и добавлением 10 элементов в секунду):
ObservableCollection: http://i.imgur.com/7ZoSv.png
BindingList http://i.imgur.com/jm5qF.png
, вы можете увидеть общее падениеАктивность процессора и около гаЕсли галочки требуются для обработки дерева в случае Binding List!Спасибо Акаш за эту прекрасную идею.