|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||||||||||||||||||||||
Синхронизация асинхронного заполения списка и CancellationToken06.10.2021, 14:07. Показов 8763. Ответов 95
Метки нет (Все метки)
Открываю GUI страницу со списком картинок.
Проблема: из-за того, что картинки весят много -- какое-то время, допустим 2 секунды, страница просто пустая, а после резко заполняется всем списком. Желаемый результат: хотелось бы, чтобы при открывании страницы элементы постепенно подгружались. Решение 1: решил сделать само заполнение асинхронным (просьба сначала досмотреть все 3 решения)
Решение 2: добавил локировку
Решение 3: я подумал, что во время закрытия страницы будет уместным сделать cancelTokenSource.Cancel();
Добавлено через 9 минут Также хотел упомянуть следущий момент:
0
|
|||||||||||||||||||||||||||
| 06.10.2021, 14:07 | |
|
Ответы с готовыми решениями:
95
BlockingCollection<T>, Add(T item, CancellationToken cancellationToken); Зачем нужен CancellationToken? Не происходит отмена задачи (CancellationToken) |
|
Модератор
|
||
| 10.10.2021, 19:51 | ||
|
Это не UI элемент. Каким типом в DeviceViewModel отражена картинка? GUID, ImegeSource, поток, другое? И уже потом EntityImage строит по полученному Entity по данным из DeviceViewModel отображение картинки. Вот надо понять в чём тормоза. Просто сам вывод картинок в Xamarin это долго. Или конкретно в этом случае получение данных для картинки по DeviceViewModel это долгий процесс.
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||||||
| 10.10.2021, 19:52 [ТС] | ||||||||||||
|
Сейчас отправлю подробнее:
0
|
||||||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||
| 10.10.2021, 19:58 [ТС] | ||||||||
![]() Добавлено через 3 минуты Например локально будет так:
0
|
||||||||
|
Модератор
|
|||
| 10.10.2021, 20:02 | |||
|
То есть основные тормоза создаёт controls:EntityImage ?Надо тогда разбираться в его логике. И мне всё равно кажется, что даже без картинок вывод 7 секунд - это очень много. Хотя может для Xamarin это нормально. Добавлено через 2 минуты BitmapExtensions.LoadBitmapResource?В каком потоке выполняется? Можно ли его dspsdfnm на потоке пула?
0
|
|||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||||||
| 10.10.2021, 22:12 [ТС] | |||||||||||
|
Одну из проблем я нашёл:
вот так не лагает
0
|
|||||||||||
|
Модератор
|
|||
| 10.10.2021, 22:40 | |||
|
У него же марщалинг в UI поток каждого действия. Я поэтому и отказался от его использования. Но вот я не пойму как вы используете простой ObservableCollection без маршалинга и синхронизации привязок. На WPF простой ObservableCollection при изменении из других потоков выкидывает исключения. Наверное, в Xamarin это реализовано по другому. Это надо тестить, разбираться. Документации толковой очень мало. А на все эти тесты нет времени. Вы проверяли, что у вас содержит var devices?Там точно не нулл? У вас же нет ожидания результата. И сама по себе строчка Task.Run(async () => await devicesRepository.GetDevices(id)).Result, вроде, эквивалентна devicesRepository.GetDevices(id).Result.Добавлено через 2 минуты limeniye, и вы отказались от асинхронного метода? Сделали UpdateDevicesWithCancellationTokenChecke r синхронным?
0
|
|||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||
| 10.10.2021, 22:52 [ТС] | |||||
|
Добавлено через 53 секунды Добавлено через 2 минуты Но, как я понимаю, если пишу Result -- то будет автоматическое ожидание, когда из devices понадобится взять значение, если оно ещё не пришло туда. Верно? Добавлено через 1 минуту
0
|
|||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 11.10.2021, 00:57 [ТС] | |
|
Элд Хасп, тот метод, который возвращал null я переделал уже. Там будет пустой список.
0
|
|
|
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,700
|
||
| 11.10.2021, 12:10 | ||
|
не проще возвращать сразу photoDocument?
2
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 11.10.2021, 13:05 [ТС] | |
|
0
|
|
|
Модератор
|
||
| 11.10.2021, 13:09 | ||
|
Или дополнить другим методом. Для WPF нужен ImageSource. Поэтому в задаче надо не поток возвращать, а создавать экземпляр ImageSource из этого потока, замораживать и возвращать его.
1
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 11.10.2021, 20:52 [ТС] | |
|
Сделав кучу тестов на новом, чистом проекте, выяснил, что проблема точно где-то в коде, или подходе его реализации.
Список, с 500 картинками, в тестовом проекте, прогружается за доли секунды без какой-либо виртуализации или способов оптимизации. План исправления следующий: - реализовать новый способ асинхронного отображения картинки в тестовом проекте; - выпилить старую реализацию из проекта, выкинуть её в мусор и заменить новой. Всем огромное спасибо за участие в теме. Много узнал нового. Тема закрыта.
0
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||||||||||||||||||||
| 15.10.2021, 15:21 [ТС] | ||||||||||||||||||||||||||
|
Элд Хасп, сделал всё с нуля в другом, тестовом приложении.
Также хочу подметить, что если не использовать передачу в Dispatcher -- ошибок может не быть, но приложение, порой, работает криво. Поэтому теперь использую всегда. Пример:
Из модели в ViewModel приходит событие добавления в список нового элемента. Во ViewModel'е добавляю так, без await'a:
image.Freeze(); нет в Xamarin и в UWP, по-моему, тоже. Поэтому делаю через await Device.InvokeOnMainThreadAsync
0
|
||||||||||||||||||||||||||
| 15.10.2021, 15:21 | |
|
Данные об отделах ( процент заполения )
Почему CancellationToken не сбрасывает Token Проверка на правильность заполения полей Отправка формы после проверки заполения reCAPTCHA Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|