C# 使用ReactiveList视图注入的ReactiveUi Memoryleak

C# 使用ReactiveList视图注入的ReactiveUi Memoryleak,c#,wpf,reactiveui,C#,Wpf,Reactiveui,我准备的设置非常简单。 我有一个shellview,其中填充了一个视图,该视图只包含一个绑定到reactivelist的Listbox public LacquerProductionOrderListView() { InitializeComponent(); this.WhenActivated( d => { t

我准备的设置非常简单。 我有一个shellview,其中填充了一个视图,该视图只包含一个绑定到reactivelist的Listbox

public LacquerProductionOrderListView()
        {
            InitializeComponent();


            this.WhenActivated(
                d =>
                {
                    this.
                    OneWayBind(ViewModel, vm => vm.LacquerProductionOrders,
                        v => v.LacquerProductionOrderList.ItemsSource)
                        .AddTo(d);
                });
        }
Viewmodel也非常简单,仅用于测试目的

    public LacquerProductionOrderListViewModel()
    {
        this.activator = new ViewModelActivator();


        LacquerProductionOrders = new ReactiveList<LacquerProductionOrderViewModel>();



        var c1 = Observable.Interval(TimeSpan.FromSeconds(5))
           .ObserveOn(DispatcherScheduler.Current)
           .Subscribe(_ => LacquerProductionOrders.AddRange(new List<LacquerProductionOrderViewModel>()

        {
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0)),
            new LacquerProductionOrderViewModel(new ProductionOrder(null, "foo", 0, 0, 0))
        }
               )
        );

        var c = Observable.Interval(TimeSpan.FromSeconds(7))
            //.ObserveOn(DispatcherScheduler.Current)
            .Subscribe(_ => LacquerProductionOrders.Clear());

        this.WhenActivated(d =>
        {
            c.AddTo(d);
            c1.AddTo(d);

        });

    }
从未调用,因此应用程序的内存消耗增长相当快。也许你可以告诉我哪里错了,或者我可以做得更好

所以我的解决方法是使用

<ListBox.ItemTemplate>    
<DataTemplate> 
...
</DataTemplate> 
</ListBox.ItemTemplate> 

...
而不是为列表中的viewmodels重新设置视图。这是可行的,但很明显,使用注入视图/视图模型会更好


亲切问候

通常不会为C#类声明析构函数。为了释放资源,我们使用
IDisposable
接口。完成对象生命周期时,将调用
object.Dispose()
,以释放资源。试试看,我认为ReactiveUI支持一次性使用。我刚刚声明了析构函数,以便轻松查看viewmodel是否被销毁。实现IDisposable也无助于解决这个问题。通常不会为C#类声明析构函数。为了释放资源,我们使用
IDisposable
接口。完成对象生命周期时,将调用
object.Dispose()
,以释放资源。试试看,我认为ReactiveUI支持一次性使用。我刚刚声明了析构函数,以便轻松查看viewmodel是否被销毁。实现IDisposable也无助于解决这个问题。
<ListBox.ItemTemplate>    
<DataTemplate> 
...
</DataTemplate> 
</ListBox.ItemTemplate>