В настоящее время мы используем ReactiveUI, чтобы помочь создать довольно большое приложение Windows на базе WPF. Все шло хорошо, пока мы не обнаружили, что наше приложение потребляет огромное количество памяти... в основном все наши взгляды, модели-модели и модели не собирались собирать мусор.
Основываясь на информации из профилировщиков памяти, таких как Jet Brains dotMemory, ReactiveUI является основным виновником. В частности, привязки The ReactiveUI, которые мы настраиваем в наших представлениях, хотя мы используем лучшие практики и гарантируем, что все привязки расположены, когда представление отключено.
Ниже приведен пример одного из видов, которые мы создаем. Любые мысли о том, где мы могли бы пойти не так, были бы очень благодарны.
public partial class RunbookInputsView : IViewFor<RunbookInputsViewModel>
{
public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(
"ViewModel", typeof(RunbookInputsViewModel), typeof(RunbookInputsView));
public RunbookInputsView()
{
InitializeComponent();
this.WhenActivated(d =>
{
d(this.OneWayBind(ViewModel, vm => vm.AddInput, v => v.AddInput.Command));
d(this.OneWayBind(ViewModel, vm => vm.Inputs, v => v.Inputs.ItemsSource));
});
}
object IViewFor.ViewModel
{
get { return ViewModel; }
set { ViewModel = (RunbookInputsViewModel)value; }
}
public RunbookInputsViewModel ViewModel
{
get { return (RunbookInputsViewModel) GetValue(ViewModelProperty); }
set { SetValue(ViewModelProperty, value); }
}
}