Агрегирование События призмы - подписчик, не инициированный

Вместо того, чтобы жаловаться на то, сколько память Eclipse берет, просто идите вперед и проанализируйте, где проблема. Я мог бы быть всего одним плагином.

Проверка блог здесь: "потребление памяти анализа затмения"

С уважением, Markus

16
задан stiank81 27 November 2009 в 21:47
поделиться

2 ответа

Агрегатор событий Prism использует слабые ссылки для связи с событиями. Это сделано для предотвращения утечки памяти из обработчиков событий.

После запуска инициализатора модуля он удаляется, поэтому обработчик событий уничтожается до того, как событие будет запущено. Вы можете указать Prism сохранить обработчик событий, используя перегрузку Subscribe.

evnt.Subscribe(MyModuleRequested, true);

В качестве шаблона Я обычно помещаю подписчиков на события в отдельный класс и вызываю этот класс из метода Initialize модулей. Таким образом, события остаются в живых, но разделяются, пока модуль все еще уничтожен.

30
ответ дан 30 November 2019 в 17:27
поделиться

Итак, у меня только что появилась теория, но нет времени проверять ее прямо сейчас .. Сделаем завтра.

Вопрос: Сохранит ли их активность добавление модулей в ModuleCatalogue? Я так и думал. Следовательно - MyModule должен оставаться в живых - и затем будет запущен, когда событие будет опубликовано.

protected override IModuleCatalog GetModuleCatalog()
{
    var catalog = new ModuleCatalog();
    catalog.AddModule(typeof(MyModule));
    return catalog;
}

Однако, если это не поддерживает работу модуля, очевидно, что ему будет сложно отреагировать на событие. Объект-модуль умирает, но не отписывается - значит, я увижу подписчика в списке EventAggregator, но подписчика больше нет. Также; Я упоминал, что на самом деле он действительно иногда работает - что было бы в случае, если бы сборщик мусора не успел вынести мусор до того, как событие сработает.

Это похоже на случай? Если так - я не Пока что я не придумал решения, так что вы можете предложить его в другой ветке ответов ..

Итак; что такое ModuleCataloge? Просто список, сохраненный для инициализации, а затем выброшенный?

2
ответ дан 30 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: