расскажите про weakevents

netivan
Дата: 26.06.2014 14:38:50
Есть приложение - сервис, бэкенд. Есть подозрение,что течет память из-за событий. Прочитал про слабый ссылки http://habrahabr.ru/post/89529/ , в книге пример тут http://www.albahari.com/nutshell/cs4ch12.aspx
Может кто-то сказать реальный опыт подобных решений,возможные костыли. За код в виде менеджера плюс в карму:)
Сон Веры Павловны
Дата: 26.06.2014 15:02:27
netivan
За код в виде менеджера плюс в карму

http://msdn.microsoft.com/en-us/library/aa970850(v=vs.110).aspx
Для некоторых событий есть менеджеры из коробки. Например, PropertyChangedEventManager.
Решение как решение, уместное в своей области применения.
netivan
Дата: 26.06.2014 15:05:05
Сон Веры Павловны
netivan
За код в виде менеджера плюс в карму

http://msdn.microsoft.com/en-us/library/aa970850(v=vs.110).aspx
Для некоторых событий есть менеджеры из коробки. Например, PropertyChangedEventManager.
Решение как решение, уместное в своей области применения.

это сборка WPf. Впринципе можно попробовать.
Алексей К
Дата: 26.06.2014 19:32:46
netivan
Может кто-то сказать реальный опыт подобных решений,возможные костыли. За код в виде менеджера плюс в карму:)
Использовал для подписки на "глобальное" событие Application.Exit, чтобы избежать возможных утечек памяти. Вроде ничего особенного, костылей не замечено.

Подписчик.
Менеджер.
Хэлпер для упрощения менеджерописания. В .Net 4.5 вроде как такой класс добавлен, но не уверен.
Алексей К
Дата: 26.06.2014 19:46:14
Вдогонку: требуется использовать weak event для подписки на события ViewModel из View, если время жизни у ViewModel больше чем у View. Такое может случиться при использовании DataTemplate/ControlTemplate. Поэтому биндинги используют упомянутый выше PropertyChangedEventManager. Теоретически, можно самостоятельно отписываться от событий в, например, событии Unload, но не рекомендуется.
Сон Веры Павловны
Дата: 27.06.2014 04:43:28
А я weakevents использовал для привязки к PropertyChanged сериализованных настроек - чтобы при принудительной перезагрузке настроек (ApplicationSettingsBase.Reload) старые настройки благополучно отправлялись в GC.