代码之家  ›  专栏  ›  技术社区  ›  Guerric P

当我误用interval Observable时,如何释放内存?

  •  0
  • Guerric P  · 技术社区  · 6 年前

    此代码维护以下四个实例 BigClass 如Chrome中的内存转储所示。这个 interval Observable 保持活动状态并维护对以下实例有引用的回调 大类 .

    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>

    在这种情况下,当订阅和源上都没有引用时,我该如何释放内存 可观察 ?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Oles Savluk    6 年前

    对于每一个 .subscribe 您必须手动呼叫 .unsubscribe 取消执行并释放资源。为了使这个过程更容易,尽量保持所有内容都是可观察的,避免手动订阅。通常,由您的框架、模板引擎等完成会更好。

    有关更多信息,请查看以下文档 Disposing Observable Executions