提问者:小点点

可观察源对象被销毁时的内存泄漏


当你订阅可观察时会发生什么,那么这个可观察的源代码不再在应用程序中使用?有内存泄漏吗?我有FormArray其中有一些FormGroup。我订阅了每个FormGroup. value eChange,当FormGroupFormArray中删除时,我需要tu取消订阅吗?主题也是如此,如果由于某种原因我将主题在例如组件中并且这个组件将被销毁,我需要取消订阅它们吗?我已经阅读了这个答案Angular/RxJs我什么时候应该取消订阅,但没有关于我的案例。


共1个答案

匿名用户

我想说没有必要取消订阅。如果你这样做不会有任何坏处,但我认为没有必要。

你可以在这个答案中找到更详细的解释。

但要点是这样的:在这种情况下,当从订阅的回调创建的订阅者仍然是主题的订阅者列表的一部分时,就会发生内存泄漏。这意味着当再次创建组件时,该类型的另一个订阅者将被添加到列表中,而旧的订阅者仍然存在。这就是内存泄漏发生的原因。

但是,如果您取消订阅,该订阅者将不再是该订阅者列表的一部分。我说在这种情况下不需要取消订阅的原因是,唯一仍然引用该订阅者的东西,即主题实例,它可以防止旧订阅者被垃圾回收,将被清空。我的推理是:如果保持该订阅者存活的东西被清空,那么订阅者的下一个回调就不可能再次被访问,因此它可以被垃圾回收。