Медленный WPF 4 Обновление данных - PullRequest
1 голос
/ 11 мая 2011

Я использую компонент WPF DataGrid из платформы .NET 4, он связан с потокобезопасной наблюдаемой коллекцией, которую я нашел здесь: http://www.deanchalk.me.uk/post/Thread-Safe-Dispatcher-Safe-Observable-Collection-for-WPF.aspx

Программа представляет собой инструмент системного администратора, который пингует каждыйIP-адрес в диапазоне, если есть ответ, он создает объект в коллекции с некоторыми подробностями с компьютера.

Проблема, с которой я сталкиваюсь, заключается в низкой производительности.Первоначально я просто обновлял коллекцию и позволял сетке данных регистрировать изменения.Это вызвало проблему, когда элемент управления DataGrid не обновлялся и не отображал данные, пока я не прокручивал.

Итак, я добавил таймер для вызова метода обновления грида, таймер срабатывает каждые 750 мс.Это работало блестяще, пока я не понял, что пользовательский интерфейс программ полностью не отвечает, когда таймер включен и он сканирует.

Без таймера производительность приемлема, без нее это ужасно.Я безуспешно пробовал несколько значений для периода ожидания (до 2000 мс), а также убедился, что мои столбцы имеют фиксированную ширину (я читал, что автоматически созданные столбцы и ширина могут вызывать проблемы с производительностью).

Суммачисло строк в сетке составляет около 300 - 400 с 5 столбцами, так что это не совсем огромная сетка.

Есть ли у кого-нибудь какие-либо предложения о том, как я мог бы своевременно обновлять сетку, когда сбор задобавлено, без ущерба для производительности?

1 Ответ

4 голосов
/ 11 мая 2011

Если ваши привязки верны, вам не нужно обновлять DataGrid вручную.Обновление наблюдаемой коллекции за сценой должно автоматически вызвать (при условии, что вы реализовали NotifyPropertyChanged) обновление DataGrid.300 - 400 - это не число, которое замедляет DataGrid.Ваша DataGrid находится внутри ScrollViewer?иногда это также ухудшает производительность.Убедитесь, что ваши привязки работают нормально, тогда вам не нужно обновлять вручную.

...