我们目前正在使用ReactiveUI来构建一个相当庞大的基于WPF的Windows应用程序。一切都很顺利,直到我们发现我们的应用程序消耗了大量的内存...实际上我们所有的视图、视图模型和模型都没有被垃圾回收。
根据内存分析工具(如Jet Brains dotMemory)提供的信息,ReactiveUI似乎是主要的罪魁祸首。特别是我们在视图中配置的ReactiveUI绑定,即使我们遵循最佳实践并确保在视图停用时释放所有绑定。
以下是我们创建的一个视图示例。非常感谢您能提出我们可能存在何处问题的想法。
根据内存分析工具(如Jet Brains dotMemory)提供的信息,ReactiveUI似乎是主要的罪魁祸首。特别是我们在视图中配置的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); }
}
}
WhenActivated
的其中一个调用中添加d(Disposable.Create(()=> System.Diagnostics.Debug.WriteLine("DEACTIVATED")))
。 - Kent Boogaartsource.CreateDerivedCollection(x => ViewModel(x));
但是这个代码似乎有问题:source.CreateDerivedCollection(x => ViewModel(x, this.Something));
- David Cader