为什么不收集FormControl#valueChanges的订阅垃圾?

时间:2018-08-15 12:37:17

标签: angular memory-leaks rxjs observable angular-reactive-forms

我经过了很多讨论,说一个人需要从FormControl#valueChanges退订,以防止内存泄漏。我了解了Observable退订的“何时”和“如何”。据我了解,产生无限个值的Observable需要取消订阅,而FormControl#valueChanges就是这样的Observable

但是我的问题是,为什么不收集这些Observables的垃圾?我的意思是,当Angular组件被销毁时,引用就死了吗?模板中的表单控件不再存在。 FormControl实例也消失了。因此,如果Observable的“源” FormControl不存在了,那么其成员valueChanges仍将如何存在并保留其订阅呢?

1 个答案:

答案 0 :(得分:0)

好的,所以我用Chrome Dev Tools中的Memory Profiler进行了一些实验。我发现的是,无论您退订FormControl#valueChanges还是该组件被销毁,结果都差不多。在这两种情况下,一个SubjectSubscription都会被垃圾回收。看看下面的结果。


当组件被破坏时

List of some deleted objects when component got destroyed

手动取消订阅时

List of some deleted objects when Observable was unsubscribed

因此,我认为可以肯定地说订阅确实已被删除,无需手动取消订阅。