Я хочу привязать данные (1000 записей в секунду, я имею в виду 25 записей за 25 milisecond) к списку, и его нужно заказать по убыванию по дате.Wpf Realtime DataBinding To Listview
Я использовал наблюдаемый комплект. Когда я получаю данные из источника (например, socket), я добавляю в свою коллекцию, вставляя модель с нулевым индексом наблюдаемой коллекции.
observableCollection.Insert(0, model);
Работает без проблем, но использует% 30 cpu (intel i5). И если я открываю эти окна 10 раз, мое приложение становится медленнее. Я использую свойства виртуализации. Если я не устанавливаю источник элементов списка, использование процессора составляет около% 0.
Это мой ListView:
<ListView HorizontalAlignment="Stretch" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" Name="listView" ScrollViewer.CanContentScroll="True" Grid.Column="0" VerticalAlignment="Stretch" ItemsSource="{Binding observableCollection}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel></VirtualizingStackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding ID}" Width="75" Header="Id" />
<GridViewColumn DisplayMemberBinding="{Binding Time}" Width="175" Header="Time" />
<!-- Ten more columns -->
</GridView>
</ListView.View>
</ListView>
Правильно ли использовать ListView?
Как повысить производительность?
Есть ли другие методы для этого?
Игнорирование проблемы с обновлением на мгновение, действительно ли вы ожидаете, что пользователи просмотрят столько данных, которые ищут что-то? Я бы сказал, что даже видимые строки наверху слишком быстро меняются, если кто-то «прочитает», что в них. Может ли альтернативный пользовательский интерфейс быть лучшим подходом? Например, запись данных в какой-то файл журнала и предоставление пользователям диалогового окна поиска. –
Нет, пользователи должны использовать прокрутку –
Это несчастливо. Вероятно, вы уже поняли, что метод привязки «ObservableCollection» и «ItemsControl» не справится с этим объемом обновления данных с такой скоростью. Также вы вставляете элементы вверху списка, а не внизу, что AFAIK заставит элемент управления обновлять * все * своих контейнеров. Если это ваши ограничения пользовательского интерфейса, я бы предложил отказаться от контроля элементов и привязки вообще, написав собственный пользовательский элемент управления и создав визуальные эффекты с помощью кода. –