此代码维持 BigClass
的四个实例处于事件状态,如 Chrome 中的内存转储所示。 interval
Observable
保持事件状态,并维持引用 BigClass
实例的回调事件。
class BigClass {
constructor(observable) {
this.bigArray = new Array(9999999).fill(0);
observable.subscribe(x => this.result = x);
}
//...
}
let observable = new rxjs.interval(1000);
let bigObject = new BigClass(observable);
let bigObject1 = new BigClass(observable);
let bigObject2 = new BigClass(observable);
let bigObject3 = new BigClass(observable);
bigObject = null;
bigObject1 = null;
bigObject2 = null;
bigObject3 = null;
observable = null;
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script>
在这种情况下,当我在订阅和源 Observable
上都没有更多引用时,如何释放内存?
最佳答案
对于每个 .subscribe
,您必须手动调用 .unsubscribe
来取消执行并释放资源。为了使这个过程更容易,请尝试使所有内容都可观察并避免手动订阅。通常由您的框架、模板引擎等完成会更好。
有关更多信息,请查看有关 Disposing Observable Executions 的文档
关于javascript - 当我误用Interval Observable时如何释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60442495/