Это мнение Кента Бугарта (одного из сопровождающих ReactiveUI) по этому вопросу:
Итак, гипотетически ... если вы используете WhenActivated
в представлении, когда вы распоряжаетесьодноразовые что он возвращает?Вам придется хранить его в местном поле и сделать вид одноразовым.Но тогда, кто располагает мнением?Вам понадобятся ловушки платформы, чтобы знать, когда подходящее время для его использования - нетривиальный вопрос, если это представление повторно используется в сценариях виртуализации.Итак, вот что.
А как насчет того, когда вы выполняете реактивную команду?Вы храните одноразовые вещи, которые можете получить, чтобы потом «почистить»?Я догадываюсь, нет, и не зря.Когда выполнение завершается, все наблюдатели автоматически отписываются.Как правило, подписки на конвейеры с конечным сроком службы (например, через тайм-аут) не нужно удалять вручную.Утилизация такой подписки примерно так же полезна, как и утилизация MemoryStream
.
. В дополнение к этому я обнаружил, что реактивный код в виртуальных машинах, в частности, имеет тенденцию манипулировать множеством одноразовых изделий.Хранение всех этих одноразовых принадлежностей и попытки утилизации имеют тенденцию загромождать код и заставлять саму ВМ быть одноразовой, что еще больше сбивает с толку.Perf - это еще один фактор, особенно для Android.
Так что мой совет проистекает из всего этого.Я считаю, что вызов тех подписок, которые требуют удаления путем их включения в WhenActivated
, является наиболее прагматичным подходом.