|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
31.01.2016, 21:46 | #1 |
Пользователь
Регистрация: 31.01.2016
Сообщений: 17
|
wpf: обновление гуи
В окне находится DataGrid (не принципиально).
Данные в него приходят асинхронно из сокета. Интрвал примерно 5 сек +- 1 сек. При этом весь гуи "замерзает". Что можно сделать чтобы человек не ощущал этих тормозов? Другой контрол или как-то по хитрому обновлять? Сейчас данные биндятся по средствам ObservableCollection. Последний раз редактировалось chugada; 31.01.2016 в 21:49. |
31.01.2016, 22:12 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Как именно асинхронно? Код покажите.
Не должно ничего замерзать если работа с сокетом не в основном потоке происходит.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
31.01.2016, 22:37 | #3 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
deleteet
|
31.01.2016, 22:38 | #4 |
Пользователь
Регистрация: 31.01.2016
Сообщений: 17
|
С сокетами все в порядке. Данные приходят, десериализуються в массив.
Но потом начинаем их в главном отправлять в коллекцию. И вот тут начинаются тормоза. вот код обновления коллекции Код:
Все конвертеры которые могли убрали из xaml и перенесли в инициализацию данных в момент после получения из сокета. В каждой строке грида есть несколько картинок, ректанглов, и еще всякие контрорлы, все это в соответствующих DataGridTemplateColumn. |
31.01.2016, 22:51 | #5 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
При каждом "Collection.Add(item);" вызывается NotifyCollectionChanged, который скорости вашему приложению явно не добавляет ))
Коллекцию надо менять целиком, а потом вызывать this.PropertyChanged("Collection") Код:
А в гриде у вас виртуализация включена? Если нет, то обязательно включите. Столбцов - по желанию, а строк вот прям обязательно надо
Благодарить в репутацию. Проклинать — туда же
|
31.01.2016, 22:57 | #6 |
Пользователь
Регистрация: 31.01.2016
Сообщений: 17
|
про NotifyCollectionChanged понятно, пробовали и пересоздавать коллекцию, но результат тотже. Тормоза именно при обновлении самого грида.
По поводу виртуализации, по умолчанию она уже включена если справка не врет или ее еще както надо ососбо настроить? |
31.01.2016, 22:59 | #7 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
31.01.2016, 23:10 | #8 | |||
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Цитата:
Все равно уберите ужасный код с добавлением элементов поштучно и пересоздавайте коллекцию целиком Цитата:
Цитата:
----- Можно, конечно, лечить симптомы (асинхроный инвок в UI через диспетчер или IsAsync=true в биндинге), но это неправильный подход, вы и сами это прекрасно понимаете
Благодарить в репутацию. Проклинать — туда же
Последний раз редактировалось Luuzuk; 31.01.2016 в 23:14. |
|||
31.01.2016, 23:13 | #9 | ||
Пользователь
Регистрация: 31.01.2016
Сообщений: 17
|
Цитата:
В общем каждый item это объект и у которого есть еще своя внутренняя коллекция, в паре колонок есть еще свой "проход" по этой внутренней коллекции. Там элементов или 2 или 3, не больше не меньше. Цитата:
|
||
31.01.2016, 23:16 | #10 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Блин, самый главный вопрос забыл... А профайлер запускали?
Благодарить в репутацию. Проклинать — туда же
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[C# + WPF] Отлов нажатий клавиш, хуки, горячие клавиши в проекте WPF | Casper-SC | WPF, UWP, WinRT, XAML | 3 | 03.03.2017 15:00 |
КАк создать ГУИ интерфейс без среды? | Алексей_2012 | Общие вопросы C/C++ | 5 | 12.01.2016 07:20 |
Обновление таблицы БД SqlLite - C# WPF | Notan1310 | WPF, UWP, WinRT, XAML | 4 | 08.10.2015 14:34 |
WPF/ Обновление ItemsSource-а | ShoGUN | WPF, UWP, WinRT, XAML | 0 | 02.06.2014 18:34 |