C# 我是否应该处理isScheduler。手动安排订阅以避免内存泄漏?

C# 我是否应该处理isScheduler。手动安排订阅以避免内存泄漏?,c#,reactiveui,C#,Reactiveui,在我的项目中,我必须调用RxApp.MainThreadScheduler.Schedule(()=>…) 我应该通过添加DisposeWith(DisposableOnDestroy)手动处置订阅,还是由析构函数自动调用它 我已经阅读了ReactiveUI建议,但没有找到答案 RxApp.MainThreadScheduler.Schedule(() => this.RaisePropertyChanged(statisticName)) 否,仅当您要提前取消排队操作时才进行处置。此外

在我的项目中,我必须调用
RxApp.MainThreadScheduler.Schedule(()=>…)
我应该通过添加
DisposeWith(DisposableOnDestroy)
手动处置订阅,还是由析构函数自动调用它

我已经阅读了ReactiveUI建议,但没有找到答案

RxApp.MainThreadScheduler.Schedule(() => this.RaisePropertyChanged(statisticName))


否,仅当您要提前取消排队操作时才进行处置。此外,你试图用RaisePropertyChanged来做的事情最终会让你的应用程序在变大后变得非常缓慢

否,仅当您希望提前取消排队操作时才进行处置。此外,你试图用RaisePropertyChanged来做的事情最终会让你的应用程序在变大后变得非常缓慢

通常,如果必须使用MainThreadScheduler来设置属性,则可能需要重新评估该方法。大多数可观察对象通过ObserveOn选项提供isScheduler选项,ReactiveCommand也提供了isScheduler选项,它允许您使用Subscribe()将主要结果分派到主线程。我会评估你在这个场景中所做的事情。我的应用程序中的属性不仅可以在主线程中更改。但我想通过单向绑定扩展方法将接口元素绑定到它们的元素。此方法没有计划程序参数。因此,我应该自己生成RaisePropertyChanged在代码中的许多地方将OneWayBind更改为BindTo并不方便。也许吧,但这比调度程序解决方案的性能更高,错误更少。通常,如果您必须使用MainThreadScheduler这样的方法来设置属性,您可能需要重新评估该方法。大多数可观察对象通过ObserveOn选项提供isScheduler选项,ReactiveCommand也提供了isScheduler选项,它允许您使用Subscribe()将主要结果分派到主线程。我会评估你在这个场景中所做的事情。我的应用程序中的属性不仅可以在主线程中更改。但我想通过单向绑定扩展方法将接口元素绑定到它们的元素。此方法没有计划程序参数。因此,我应该自己生成RaisePropertyChanged在代码中的许多地方将OneWayBind更改为BindTo并不方便。也许吧,但这会比计划程序解决方案性能更高,故障更少。“不,只有在您想提前取消排队操作时才进行处置”-确定。但若订阅未由反应库处理。或者库强制执行,订阅对象将由GC收集?完成后,它将由Rx自动处理,因此是的,它将有资格自动进行垃圾收集。当可观察对象完成时,它们将自动清理。如果订阅是无限的(即命令),则该订阅的生存期与您订阅的对象相关联。如果ViewModel消失,并且订阅其成员的唯一对象是其自身,则整个对象消失“否,仅当您希望提前取消排队操作时才进行处置”-确定。但若订阅未由反应库处理。或者库强制执行,订阅对象将由GC收集?完成后,它将由Rx自动处理,因此是的,它将有资格自动进行垃圾收集。当可观察对象完成时,它们将自动清理。如果订阅是无限的(即命令),则该订阅的生存期与您订阅的对象相关联。如果ViewModel消失,而订阅其成员的唯一对象是其自身,则整个对象消失