Как я могу освободить память при неправильном использовании интервала Observable? - PullRequest
0 голосов
/ 28 февраля 2020

Этот код поддерживает четыре экземпляра 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?

1 Ответ

1 голос
/ 28 февраля 2020

Для каждого .subscribe необходимо вручную вызвать .unsubscribe, чтобы отменить выполнение и освободить ресурсы. Чтобы упростить этот процесс, постарайтесь сделать все как можно более заметным и избегайте подписки вручную. Обычно это лучше, когда это делается вашей структурой, механизмом шаблонов и т. Д. c.

Для получения дополнительной информации ознакомьтесь с документацией о Удаление наблюдаемых выполнений

...