|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
MVVM Утечка памяти12.06.2022, 20:22. Показов 4545. Ответов 82
Метки нет (Все метки)
Собственно сделал подписку:
_messageService.MessagesChanged += OnMessagesChanged; в VM. А отписывать-то как? Сделал так: https://github.com/LimeniyeCyb... del.cs#L82 Но даже не понимаю.что сделал. Этого будет достаточно?
0
|
|
| 12.06.2022, 20:22 | |
|
Ответы с готовыми решениями:
82
Утечка памяти в Awesomium WebControl |
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||||||||||
| 20.06.2022, 22:10 [ТС] | ||||||||||||||||
|
Элд Хасп, сделал так для чата:
Но так как сообщения у меня не летат -- разницы никакой нет. То ли дело стриминг с камеры. Мне с сервера приходят байты новой картинки. Делал так:
0
|
||||||||||||||||
|
Модератор
|
|||||||
| 20.06.2022, 22:45 | |||||||
|
Здесь обо ваших варианта неверны. Просто читайте без локировки и перехода в UI поток:
У вас, как я понял, такой задачи не стоит - следовательно вам она не нужна. Просто передали объект синхронизации в привязку, чтобы не выкидывало исключений, и дальше "забыли про него".
0
|
|||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||||||
| 20.06.2022, 22:59 [ТС] | ||||||||||||
|
Элд Хасп, выглядит логично:
Единственная вариация, в которой не тормозит:
Добавлено через 43 секунды
0
|
||||||||||||
|
Модератор
|
||||||||||||
| 20.06.2022, 23:05 | ||||||||||||
1
|
||||||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 20.06.2022, 23:07 [ТС] | ||
0
|
||
|
Модератор
|
||||||||
| 20.06.2022, 23:17 | ||||||||
|
Вызвали в конструкторе Messages.EnableCollectionSynchronization() и всё - этого хватает чтобы исключений не выкидывало.Добавлено через 2 минуты area.Data = e.Bytes;.Метод OnCaptureFrameChanged в каком потоке вызывается?Если в UI потоке, то при большом размере e.Bytes может лагать.Добавлено через 4 минуты Судя по названию, метод OnCaptureFrameChanged похож на обработчик события какого-то UI элемента. Если я прав, то тогда он должен быть таким:
Но это для WPF! На UWP area.Data = e.Bytes должно происходить в UI потоке.И для UWP вариант с Диспетчером верный.
0
|
||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||
| 20.06.2022, 23:29 [ТС] | |||||||
|
Нет, из модели, и вызывается в другом потоке. Добавлено через 4 минуты это WPF проект. С этой записью подтормаживает также, как и со всеми другими где не dispatcher.BeginInvoke(() => {} ); :
CaptureFrameAreas.EnableCollectionSynchronization();https://github.com/LimeniyeCyb... del.cs#L35
0
|
|||||||
|
Модератор
|
||||||||
| 20.06.2022, 23:45 | ||||||||
|
Но, это как связанно с изменением свойства. Вот так попробуйте, чтобы убедиться.
То есть вот можно var point = new Point (...), а вот как у вас делает код плохочитаемым.Добавлено через 1 минуту А в актуальной версии, даже вариант с конструктором не желательно использовать. Нужно так: Point point = new(...);.Добавлено через 4 минуты С ним, вообще, по другому работать надо. И ещё зависит от реализации словаря. Во всех реализациях ObservableDictionary при любом изменении словаря вызывается ПОЛНЫЙ рендеринг всего словаря. Способа вызвать рендеринг только одного ключа или значения НЕ СУЩЕСТВУЕТ.
1
|
||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||
| 20.06.2022, 23:51 [ТС] | ||||||
|
Элд Хасп, подтормаживает:
https://github.com/LimeniyeCyberforum/Meeting Там ничего сложного: просто изменить false на true и запускать сервер вместе c WPF приложением нужно. Гляньте, может станет ясней, а то пальцем в небо тыкаем.
0
|
||||||
|
Модератор
|
|||||||||
| 21.06.2022, 00:05 | |||||||||
|
В WPF/UWP нет дефолтной реализации обновления словаря. Все эти ObservableDictionary - это попытки замаскировать словарь под наблюдаемый список. И ни одна из них никогда не будет в полной мере работать как ObservableCollection. У всех у них есть ограничения и какие-то нюансы для правильной работы. Я, вообще, не советую их использовать в привязках, особенно, если они большие и/или быстро меняющиеся. Попробуйте заменить на диспетчер и лагов не будет, но по сути это костыль и скорее говорит об архитектурных проблемах, чем о том что вот так правильно решать. Если всё реализовано верно, то VM не должна ничего знать о Диспетчере.
Напомните после обеда.
1
|
|||||||||
|
Модератор
|
|||||||||||||||||
| 21.06.2022, 14:09 | |||||||||||||||||
Value.Data - это массив байт. И при его изменении привязка будет синхронно в UI потоке его конвертировать в ImageSource.Можно попробовать Source="{Binding Value.Data, IsAsync=True}".Если не поможет, то нужно делать "ручную" конвертацию в таске. 2) CaptureFramesUserControl привязка к словарю:
Здесь нужна ObservableCollection. 3) По всему проекту много предупреждений Студии о nullable контексте. Почему не устраняете их? Добавлено через 4 минуты 4) Реализация метода OnCaptureFrameChanged должна быть такой:
Нужно разбираться с причиной лагов, а не добавлять костыли. Добавлено через 2 минуты Не совсем такой - так как CaptureFrameAreas надо заменить на ObservableCollection или использовать и её и словарь. Но привязка должна быть именно к ObservableCollection. А словарь можно использовать для быстрого обновления данных камер. Хотя если камер в пределах сотни, то словарь здесь и вовсе не нужен.
1
|
|||||||||||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||
| 21.06.2022, 16:53 [ТС] | ||||
|
0
|
||||
|
Модератор
|
||||||||
| 21.06.2022, 18:49 | ||||||||
|
Должно быть нечто подобное:
Но конкретно в данной задаче, даже такой словарь это излишние сложности. Время обычного линейного поиска по списку из сотен элементов - максимум единицы микросекунды, а возможно даже и доли микросекунды. Время обновления WPF представления единицы и десятки миллисекунды. Разница на 3-5 порядков. Добавлено через 3 минуты Свойство Data делаете ImageSource, полученный массив байт конвертируете в BitmapImage, замораживаете и записывает в свойство Data.
0
|
||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||
| 21.06.2022, 19:38 [ТС] | |||||||
|
Элд Хасп, для чего я сделал Dictonary
Типы разные -- Guid -- одинаковый. Что банально добавить или изменить элемент, мне нужно сделать столько действий:
Потом нужно узнать его индекс. И если индекс больше -1 -- тогда ряд операций. как-то много ![]() Добавлено через 8 минут Элд Хасп, переделал на ObservableCollection -- не помогло. По прежнему без обёртки в Dispatcher -- подтормаживает. Значит дело не в нём Добавлено через 10 минут
0
|
|||||||
|
Модератор
|
||||
| 21.06.2022, 20:07 | ||||
|
Это вообще о другом - что неверно используете типы, неверный подход к реализации. Сделайте конвертацию сразу присвоения, чтобы понять помогает это или нет. Если поможет, то уже покажу как убрать ItemsSource из VM. И убедитесь что метод OnCaptureFrameChanged вызывается в задаче, а не в UI потоке или в другом одном и том же потоке. Добавлено через 2 минуты Это нормально. При любом раскладе словарю не место в свойствах VM (для данной задачи). Добавлено через 2 минуты Словарь имел бы какое-то смысл если бы у вас были к нему привязки по ключам (а не по индексам). У вас такого нет. Ни какие другие аргументы не могут быть основанием для введения словаря. Если вам удобно реализовывать логику VM через него - ради бога. Но Представление зачем знать об этой логике?
0
|
||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||||||||||||||||||||
| 21.06.2022, 21:20 [ТС] | |||||||||||||||||||||||||
|
Элд Хасп, я попытался изменить Byte[] на
BitmapImage? Data.
CaptureFrameAreas[index].Data = e.Bytes.ConvertByteArrayToBitmapImage(); вылетает диалоговое окно и исключение.При чём если обернуть эту строку в try/catch -- окно всё равно будет вылетать, значит ошибка где-то в другом месте появляется. Exception Кликните здесь для просмотра всего текста
StackTrace Кликните здесь для просмотра всего текста
Добавлено через 6 минут Изменил, ради теста, запись на следущую:
Не тормозит, а именно самого кадра нет. Как-будто null отобразило. Странно. Добавлено через 3 минуты Удалил IsAsync=True и теперь всё нормальноДобавлено через 11 минут В общем, потестил и вдоль и поперёк -- безрезультатно. Куда-то не в ту сторону копаю. Добавлено через 13 минут Вроде решил проблему. С самого начала мне казалось что дело в свойстве, а именно в его Set.
Добавлено через 11 минут https://github.com/LimeniyeCyb... e752c7f7ab https://github.com/LimeniyeCyb... 52b3c80d36
0
|
|||||||||||||||||||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||
| 21.06.2022, 21:23 [ТС] | |||||||
0
|
|||||||
|
Модератор
|
|||||||||
| 21.06.2022, 21:28 | |||||||||
|
Это говорит о том, что проблемы с синхронизацией потоков, но перекидывать всё в UI поток - не вариант. К сожалению, как мы выяснили, проверить у себя я не могу - ваша программа не запускается без камеры. Добавлено через 3 минуты Я же писал об этом:
0
|
|||||||||
| 21.06.2022, 21:28 | |
|
Возможна ли утечка памяти в следующем коде Утечка памяти при обновлении текста TextBlock Утечка памяти при большом количестве сообщений Программа не может продолжить работу, так как недостаточно памяти. Утечка в WPF? HttpWebRequest, расход памяти непомерно больших объемов и , как следствие, утечка памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|