javascript - 当我误用Interval Observable时如何释放内存?

标签 javascript memory-leaks rxjs observable

此代码维持 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/

相关文章:

angular - 如何测试 BehaviorSubject 的下一个函数?

angular - 在自动保存场景中以何种顺序使用哪些 rxjs 运算符

Angular/rxjs : Why don't I have to import toPromise anymore?

javascript - Math.pow 替代 "**"IE11 的 ES7 polyfill

javascript - DOM 更新后出现 "mouseup"问题

c++ - For 循环中的指针

java - Volley 静态回调监听器上下文 GCed

c++ - valgrind memcheck 是否支持检查 mmap

javascript - 如何制作两个 <button> 标签,其中一个触发文本并删除另一个文本?

JavaScript单选按钮检查相关问题